local-operator-ui 0.34.49 → 0.34.51

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 (91) hide show
  1. package/out/main/index.js +602 -76
  2. package/out/preload/index.js +135 -2
  3. package/out/renderer/assets/{_basePickBy-Coq1U1Is.js → _basePickBy-BBI090Ro.js} +1 -1
  4. package/out/renderer/assets/{_baseUniq-CN5nbj15.js → _baseUniq-y9eYAjJc.js} +1 -1
  5. package/out/renderer/assets/{agent-details-page-BOHG1UL8.js → agent-details-page-Danlk2zO.js} +2 -2
  6. package/out/renderer/assets/{agent-hub-page-lDe6m3U_.js → agent-hub-page-A3Wue4nD.js} +2 -2
  7. package/out/renderer/assets/agents-page-bAs2li1H.js +7 -0
  8. package/out/renderer/assets/{arc-CyEksofH.js → arc-EdrxyDyX.js} +1 -1
  9. package/out/renderer/assets/{architectureDiagram-IEHRJDOE-o2ZHU4e3.js → architectureDiagram-IEHRJDOE-CFijMKZj.js} +1 -1
  10. package/out/renderer/assets/{blockDiagram-JOT3LUYC-B0Yyp4_C.js → blockDiagram-JOT3LUYC-C6H7Lqpk.js} +1 -1
  11. package/out/renderer/assets/{book-open-CEakesEi.js → book-open-DWHX0zOs.js} +1 -1
  12. package/out/renderer/assets/browser-page-tFPFpCOA.js +1 -0
  13. package/out/renderer/assets/browser-webauthn-prompt-ysRT3f9c.js +1 -0
  14. package/out/renderer/assets/{c4Diagram-VJAJSXHY-DLUNsMlf.js → c4Diagram-VJAJSXHY-CO2Zz-2B.js} +1 -1
  15. package/out/renderer/assets/channel-G1rkDF64.js +1 -0
  16. package/out/renderer/assets/{chunk-4BMEZGHF-TEJuQZ1Y.js → chunk-4BMEZGHF-D-tQMamL.js} +1 -1
  17. package/out/renderer/assets/{chunk-A2AXSNBT-B_dFl8CN.js → chunk-A2AXSNBT-IlsswVGN.js} +1 -1
  18. package/out/renderer/assets/{chunk-AEK57VVT-BZoQ5TO6.js → chunk-AEK57VVT-CcXRuF87.js} +1 -1
  19. package/out/renderer/assets/{chunk-D6G4REZN-D1bYNZJL.js → chunk-D6G4REZN-NA6aMjOa.js} +1 -1
  20. package/out/renderer/assets/{chunk-RZ5BOZE2-DbkFvpUt.js → chunk-RZ5BOZE2-D30p6MvF.js} +1 -1
  21. package/out/renderer/assets/{chunk-XZIHB7SX-C0c85hT-.js → chunk-XZIHB7SX-DuGlTQyM.js} +1 -1
  22. package/out/renderer/assets/classDiagram-GIVACNV2-Cnz7pTLc.js +1 -0
  23. package/out/renderer/assets/classDiagram-v2-COTLJTTW-Cnz7pTLc.js +1 -0
  24. package/out/renderer/assets/clone-CorBC-J6.js +1 -0
  25. package/out/renderer/assets/{console-mirror-DDhXu5hQ.js → console-mirror-6kLMvB-0.js} +1 -1
  26. package/out/renderer/assets/{consoleCapture-DomsRGWw.js → consoleCapture-CfzJzLhS.js} +1 -1
  27. package/out/renderer/assets/{conversation-input-sync-B3FVv0Mq.js → conversation-input-sync-BPcyjSvm.js} +255 -255
  28. package/out/renderer/assets/{dagre-OKDRZEBW-CAb1XIuS.js → dagre-OKDRZEBW-lUK01kt3.js} +1 -1
  29. package/out/renderer/assets/{diagram-SSKATNLV-CAh7vH7L.js → diagram-SSKATNLV-p9gVP7bS.js} +1 -1
  30. package/out/renderer/assets/{diagram-VNBRO52H-CU4FF4Qr.js → diagram-VNBRO52H-CCftRDC_.js} +1 -1
  31. package/out/renderer/assets/{erDiagram-Q7BY3M3F-CbnNz_kj.js → erDiagram-Q7BY3M3F-BKi9l2Z-.js} +1 -1
  32. package/out/renderer/assets/{error-boundary-etstfCzN.js → error-boundary-DrP0vaXu.js} +1 -1
  33. package/out/renderer/assets/{flowDiagram-4HSFHLVR-BB6aJVKV.js → flowDiagram-4HSFHLVR-BP7Ny2Be.js} +1 -1
  34. package/out/renderer/assets/{ganttDiagram-APWFNJXF-CtOJM4d7.js → ganttDiagram-APWFNJXF-ISsPQchm.js} +1 -1
  35. package/out/renderer/assets/{gitGraphDiagram-7IBYFJ6S-DvrevAjH.js → gitGraphDiagram-7IBYFJ6S-SgeuOn3n.js} +1 -1
  36. package/out/renderer/assets/{graph-DOR9Sgwh.js → graph-t6x189od.js} +1 -1
  37. package/out/renderer/assets/{index-5vl5RXGq.js → index-2rX7wBIY.js} +1 -1
  38. package/out/renderer/assets/index-4n12XlDn.js +57 -0
  39. package/out/renderer/assets/{index-9_-S4Njy.js → index-B8oCfucM.js} +201 -201
  40. package/out/renderer/assets/{index-CZ5usiad.js → index-BFjdZgP2.js} +1 -1
  41. package/out/renderer/assets/index-DAzaIteC.css +1 -0
  42. package/out/renderer/assets/{infoDiagram-PH2N3AL5-CTd32x3B.js → infoDiagram-PH2N3AL5-DphTiVRC.js} +1 -1
  43. package/out/renderer/assets/{installer-CjbOLDvI.js → installer-BRkp5wZg.js} +1 -1
  44. package/out/renderer/assets/{journeyDiagram-U35MCT3I-2BsbTilL.js → journeyDiagram-U35MCT3I-DN4aJTUJ.js} +1 -1
  45. package/out/renderer/assets/{kanban-definition-NDS4AKOZ-DoYAcNl0.js → kanban-definition-NDS4AKOZ-BN-JsNf0.js} +1 -1
  46. package/out/renderer/assets/{layout-DSk91znb.js → layout-zr9knmov.js} +1 -1
  47. package/out/renderer/assets/{legacy-agents-page-BGSPncrN.js → legacy-agents-page-DrBberC9.js} +7 -7
  48. package/out/renderer/assets/{mermaid.core-BqK7XNWH.js → mermaid.core-C8wK03d9.js} +5 -5
  49. package/out/renderer/assets/mesh-page-Cznif7T9.js +1 -0
  50. package/out/renderer/assets/{mindmap-definition-ALO5MXBD-HV-ovM7g.js → mindmap-definition-ALO5MXBD-kRmzBSCA.js} +1 -1
  51. package/out/renderer/assets/{mini-Bco2ITLo.js → mini-laXMgc8g.js} +1 -1
  52. package/out/renderer/assets/{notebook-pen-DsGb6zKu.js → notebook-pen-DaklP6yV.js} +1 -1
  53. package/out/renderer/assets/{org-access-B_xqEqnd.js → org-access-CJhXZXGW.js} +1 -1
  54. package/out/renderer/assets/{org-surface-gate-D4SilXIt.js → org-surface-gate-CR9uyltG.js} +1 -1
  55. package/out/renderer/assets/{page-header-DZ04Whs5.js → page-header-CQRx3tBw.js} +1 -1
  56. package/out/renderer/assets/{pieDiagram-IB7DONF6-BArx4Jik.js → pieDiagram-IB7DONF6-lJ1-pGOT.js} +1 -1
  57. package/out/renderer/assets/{projects-page-DABVK4s_.js → projects-page-CdxIUECN.js} +5 -5
  58. package/out/renderer/assets/{publication-validation-BmkCCv-H.js → publication-validation-BP-55Qal.js} +1 -1
  59. package/out/renderer/assets/{quadrantDiagram-7GDLP6J5-Dmmo_urD.js → quadrantDiagram-7GDLP6J5-BwX2blj8.js} +1 -1
  60. package/out/renderer/assets/{radar-MK3ICKWK-D8Sc1Ajv.js → radar-MK3ICKWK-CHfQEdqv.js} +1 -1
  61. package/out/renderer/assets/{radient-auth-buttons-BmQt2D1Y.js → radient-auth-buttons-CpPCcIG3.js} +1 -1
  62. package/out/renderer/assets/{requirementDiagram-KVF5MWMF-BU04-wPA.js → requirementDiagram-KVF5MWMF-CQPbhFhi.js} +1 -1
  63. package/out/renderer/assets/{sankeyDiagram-QLVOVGJD-CIQO7kso.js → sankeyDiagram-QLVOVGJD-CTYu_uCM.js} +1 -1
  64. package/out/renderer/assets/{schedules-page-DllGJFS2.js → schedules-page-DIv7xYku.js} +1 -1
  65. package/out/renderer/assets/{sequenceDiagram-X6HHIX6F-BN2soxj_.js → sequenceDiagram-X6HHIX6F-D1LnOKwi.js} +1 -1
  66. package/out/renderer/assets/{settings-page-DKzDa5P5.js → settings-page-CUX_P2c8.js} +1 -1
  67. package/out/renderer/assets/{stateDiagram-DGXRK772-bGNaZvy4.js → stateDiagram-DGXRK772-BAJRIEa3.js} +1 -1
  68. package/out/renderer/assets/stateDiagram-v2-YXO3MK2T-CxmFrTkZ.js +1 -0
  69. package/out/renderer/assets/{timeline-definition-BDJGKUSR-DmM_eb2d.js → timeline-definition-BDJGKUSR-CBNE00Vi.js} +1 -1
  70. package/out/renderer/assets/ui-preferences-store-n9FM23w3.js +1 -0
  71. package/out/renderer/assets/{use-download-agent-mutation-CXv_tRQE.js → use-download-agent-mutation-NKo_cZoz.js} +4 -4
  72. package/out/renderer/assets/{use-memberships-query-C4IVeIBl.js → use-memberships-query-B4hJezFB.js} +1 -1
  73. package/out/renderer/assets/{use-session-snapshot-CrOrWGgL.js → use-session-snapshot-BrSeTlVQ.js} +1 -1
  74. package/out/renderer/assets/{xychartDiagram-VJFVF3MP-CbbQZrKE.js → xychartDiagram-VJFVF3MP-NqieI4kO.js} +1 -1
  75. package/out/renderer/console-capture.html +5 -5
  76. package/out/renderer/index.html +7 -7
  77. package/out/renderer/installer.html +4 -4
  78. package/out/renderer/mini.html +7 -7
  79. package/package.json +2 -2
  80. package/out/renderer/assets/agents-page-CS2ctxLL.js +0 -7
  81. package/out/renderer/assets/browser-page-CjbkyuiR.js +0 -1
  82. package/out/renderer/assets/browser-webauthn-prompt-Dq82YVua.js +0 -1
  83. package/out/renderer/assets/channel-BrqzOdfK.js +0 -1
  84. package/out/renderer/assets/classDiagram-GIVACNV2-C4Q7B2pX.js +0 -1
  85. package/out/renderer/assets/classDiagram-v2-COTLJTTW-C4Q7B2pX.js +0 -1
  86. package/out/renderer/assets/clone-T21nSsyt.js +0 -1
  87. package/out/renderer/assets/index-CftawgM9.js +0 -57
  88. package/out/renderer/assets/index-VwZaZzVv.css +0 -1
  89. package/out/renderer/assets/mesh-page-BxEA5Aan.js +0 -1
  90. package/out/renderer/assets/stateDiagram-v2-YXO3MK2T-CNVQhmQM.js +0 -1
  91. package/out/renderer/assets/ui-preferences-store-Byw1dJtt.js +0 -1
package/out/main/index.js CHANGED
@@ -59,6 +59,67 @@ function relayNeedsRebuild(current, next) {
59
59
  function pairingHasRemedy(cause) {
60
60
  return cause !== "governed-elsewhere" && cause !== "pre-handshake";
61
61
  }
62
+ const agentMessagesBoundarySchema = zod.z.enum([
63
+ "app_start",
64
+ "sign_in",
65
+ "window_focus",
66
+ "surface_open"
67
+ ]);
68
+ const endpointSchema = zod.z.object({
69
+ id: zod.z.string().min(1),
70
+ state: zod.z.enum(["active", "paused", "disabled"])
71
+ }).passthrough();
72
+ const tenantSchema = zod.z.object({
73
+ tenant_id: zod.z.string().min(1),
74
+ tenant_name: zod.z.string().optional(),
75
+ eligible: zod.z.boolean(),
76
+ endpoint: endpointSchema.nullable()
77
+ }).passthrough();
78
+ const agentMessagesRefusalSchema = zod.z.object({
79
+ code: zod.z.string(),
80
+ message: zod.z.string(),
81
+ details: zod.z.record(zod.z.unknown()).optional(),
82
+ retry_after_seconds: zod.z.number().optional()
83
+ }).passthrough();
84
+ zod.z.object({
85
+ capability: zod.z.number(),
86
+ // Missing on frozen H1: absence forbids consent writes, not status reads.
87
+ consent_account_guard: zod.z.boolean().optional(),
88
+ state: zod.z.enum(["ready", "signed_out", "unavailable", "update_required"]),
89
+ account_id: zod.z.string().nullable(),
90
+ tenant_id: zod.z.string().nullable(),
91
+ surface_state: zod.z.enum(["A", "B", "C", "D", "E", "F", "G"]).nullable(),
92
+ visibility: zod.z.object({
93
+ settings: zod.z.boolean(),
94
+ inbox: zod.z.boolean(),
95
+ account_door: zod.z.boolean(),
96
+ onboarding: zod.z.boolean()
97
+ }),
98
+ update_required: zod.z.boolean(),
99
+ local: zod.z.object({
100
+ enabled: zod.z.boolean(),
101
+ onboarding: zod.z.string(),
102
+ session: zod.z.string()
103
+ }),
104
+ status: zod.z.object({
105
+ tenants: zod.z.array(tenantSchema)
106
+ }).passthrough().nullable(),
107
+ consent: zod.z.object({
108
+ version: zod.z.string().min(1).max(128),
109
+ text: zod.z.string().min(1).refine(
110
+ (text) => new TextEncoder().encode(text).length <= 2048,
111
+ "Consent exceeds the served-text contract"
112
+ ),
113
+ source: zod.z.enum(["served", "cached", "embedded"])
114
+ }).nullable(),
115
+ error: agentMessagesRefusalSchema.nullable()
116
+ }).passthrough();
117
+ zod.z.object({
118
+ endpoint: endpointSchema.extend({
119
+ account_id: zod.z.string().min(1),
120
+ tenant_id: zod.z.string().min(1)
121
+ })
122
+ }).passthrough();
62
123
  const JOURNAL_ORDER_QUERY_BYTES = 6 * 1024;
63
124
  const JOURNAL_ORDER_ID_LIMIT = 512;
64
125
  function appendJournalOrderIds(query, path2, ids) {
@@ -108,6 +169,16 @@ const THREAD_FIND_MAX_CHARS = 256;
108
169
  const THREAD_FIND_DEFAULT_LIMIT = 100;
109
170
  const THREAD_FIND_MAX_LIMIT = 200;
110
171
  const DESKTOP_SYSTEM_PROMPT_MAX_CHARS = 1e6;
172
+ const memberEffort = zod.z.enum([
173
+ "auto",
174
+ "none",
175
+ "minimal",
176
+ "low",
177
+ "medium",
178
+ "high",
179
+ "xhigh",
180
+ "max"
181
+ ]);
111
182
  const profileName = zod.z.string().min(1).max(128).refine(
112
183
  (name) => name !== "." && name !== ".." && !name.includes("/") && !name.includes("\\") && [...name].every(
113
184
  (character) => character.charCodeAt(0) >= 32 && character.charCodeAt(0) !== 127
@@ -145,7 +216,23 @@ const teamFields = zod.z.object({
145
216
  zod.z.object({
146
217
  role: profileName,
147
218
  count: zod.z.number().int().min(1).max(16),
148
- kind: zod.z.enum(["agent", "team"])
219
+ kind: zod.z.enum(["agent", "team"]),
220
+ /*
221
+ * THE SLOT'S MODEL OVERRIDES (team member tiers, P3). `null` and
222
+ * absent mean the same thing on this wire - no override, fall
223
+ * through to the next layer - and the pair is spelled with the SAME
224
+ * words the backend's `TeamMember` accepts (`CANONICAL_EFFORT_TIERS`
225
+ * and `TIER_EFFORTS`), so a value this client can send cannot be one
226
+ * the server refuses. `null` is accepted rather than omitted alone
227
+ * because a cleared field is what a form has in hand.
228
+ *
229
+ * Enumerated rather than free text for the reason the tier list is:
230
+ * this client is not the only writer (the team tool, a hand-edited
231
+ * `team.yml`), and a membership gate here is what keeps a typo out of
232
+ * a roster that would otherwise be silently written and ignored.
233
+ */
234
+ tier: zod.z.enum(["lo", "med", "hi"]).nullable().optional(),
235
+ effort: memberEffort.nullable().optional()
149
236
  }).strict()
150
237
  ).max(128).optional(),
151
238
  instructions: zod.z.string().max(8e3).optional(),
@@ -474,6 +561,19 @@ const desktopRequestUnion = zod.z.discriminatedUnion("op", [
474
561
  }).strict(),
475
562
  zod.z.object({ op: zod.z.literal("teams.list") }).strict(),
476
563
  zod.z.object({ op: zod.z.literal("teams.get"), name: profileName }).strict(),
564
+ /*
565
+ * THE RESOLVED READING of every slot's model and reasoning effort, with the
566
+ * layer each came from - the team editor's answer to "why is this member on
567
+ * that model". A READ: it resolves the same precedence a launch does without
568
+ * launching anything and writes nothing.
569
+ *
570
+ * ADDITIVE, and its absence is a capability signal rather than an error: a
571
+ * backend older than the route answers 404, which is how the editor learns to
572
+ * hide its override controls (the same status `backendErrorKind` classifies as
573
+ * `outdated`). Such a server also ignores the member keys above, which is why
574
+ * the hidden editor is the honest reading rather than a lost edit.
575
+ */
576
+ zod.z.object({ op: zod.z.literal("teams.effective"), name: profileName }).strict(),
477
577
  /*
478
578
  * Team CAS is the same optional opaque echo as the profile arm: absent/null is
479
579
  * the legacy unconditional write, a supplied stale/malformed value is refused
@@ -549,7 +649,18 @@ const desktopRequestUnion = zod.z.discriminatedUnion("op", [
549
649
  scope_kind: catalogueScopeKind.optional(),
550
650
  scope_name: catalogueScopeName.optional(),
551
651
  cursor: catalogueCursor.optional(),
552
- with_counts: zod.z.boolean().optional()
652
+ with_counts: zod.z.boolean().optional(),
653
+ /*
654
+ * THE ORDER THE PAGE IS READ IN (`session_catalogue_sort`), optional and
655
+ * gated on that capability for the same reason the paging four are: a daemon
656
+ * that predates the parameter IGNORES it silently, so an un-gated client
657
+ * would receive the rank order under a request that asked for the activity
658
+ * one - a page whose membership is a wake band, which is the exact defect
659
+ * this parameter exists to remove. `activity` is the one value today; a
660
+ * literal rather than a string so a typo is a type error here rather than a
661
+ * refusal from the route.
662
+ */
663
+ sort: zod.z.literal("activity").optional()
553
664
  }).strict(),
554
665
  /*
555
666
  * Acknowledge the one-time delegated-cleanup notice:
@@ -2032,6 +2143,22 @@ const desktopRequestUnion = zod.z.discriminatedUnion("op", [
2032
2143
  zod.z.object({ op: zod.z.literal("auth.cancel"), id: id$1 }).strict(),
2033
2144
  zod.z.object({ op: zod.z.literal("auth.key"), provider: id$1, value: secret }).strict(),
2034
2145
  zod.z.object({ op: zod.z.literal("auth.logout"), provider: id$1 }).strict(),
2146
+ /*
2147
+ * Local bearer only: the harness owns Radient OAuth and organization policy.
2148
+ * The account guard is local-only and is stripped before the hub write.
2149
+ */
2150
+ zod.z.object({
2151
+ op: zod.z.literal("agent_messages.status"),
2152
+ boundary: agentMessagesBoundarySchema
2153
+ }).strict(),
2154
+ zod.z.object({
2155
+ op: zod.z.literal("agent_messages.enable"),
2156
+ expected_account_id: id$1,
2157
+ tenant_id: id$1,
2158
+ state: zod.z.literal("active"),
2159
+ consent_version: zod.z.string().min(1).max(128),
2160
+ consented_via: zod.z.literal("dialog")
2161
+ }).strict(),
2035
2162
  zod.z.object({ op: zod.z.literal("settings.list") }).strict(),
2036
2163
  zod.z.object({
2037
2164
  op: zod.z.literal("settings.edit"),
@@ -2583,6 +2710,12 @@ const DESKTOP_REFUSAL_CODE = {
2583
2710
  */
2584
2711
  transportFailed: "transport.failed"
2585
2712
  };
2713
+ zod.z.object({
2714
+ data: zod.z.object({
2715
+ aside_id: zod.z.string().optional(),
2716
+ status: zod.z.union([zod.z.enum(["adopted", "queued"]), zod.z.string()]).optional()
2717
+ }).passthrough()
2718
+ }).passthrough();
2586
2719
  const DESKTOP_MACHINE_DETAIL = {
2587
2720
  /*
2588
2721
  * NOTE for whoever greps for the ownership instruction this change removed:
@@ -2747,6 +2880,7 @@ const DESKTOP_DEADLINE_EXCEEDED_CODE = "deadline_exceeded";
2747
2880
  const DESKTOP_FOREGROUND_REQUIRED_MESSAGE = "View these completions in the foreground before marking them read.";
2748
2881
  const READ_ONLY_OPS = /* @__PURE__ */ new Set([
2749
2882
  "capabilities",
2883
+ "agent_messages.status",
2750
2884
  "accounts.list",
2751
2885
  "analytics.get",
2752
2886
  "analytics.models",
@@ -2801,6 +2935,7 @@ const READ_ONLY_OPS = /* @__PURE__ */ new Set([
2801
2935
  "sessions.variables.list",
2802
2936
  "skills.list",
2803
2937
  "subagents.transcript",
2938
+ "teams.effective",
2804
2939
  "teams.get",
2805
2940
  "teams.list",
2806
2941
  // The two phone-setup observations change nothing on the server; `tunnel.setup.run`
@@ -3180,6 +3315,11 @@ function desktopEndpoint(request) {
3180
3315
  path: `/v1/desktop/teams/${encodeURIComponent(request.name)}`,
3181
3316
  method: "GET"
3182
3317
  };
3318
+ case "teams.effective":
3319
+ return {
3320
+ path: `/v1/desktop/teams/${encodeURIComponent(request.name)}/effective`,
3321
+ method: "GET"
3322
+ };
3183
3323
  case "teams.create":
3184
3324
  return {
3185
3325
  path: "/v1/desktop/teams",
@@ -3208,6 +3348,7 @@ function desktopEndpoint(request) {
3208
3348
  if (request.cursor) params.set("cursor", request.cursor);
3209
3349
  if (request.with_counts) params.set("with_counts", "true");
3210
3350
  if (request.include_peers) params.set("include_peers", "true");
3351
+ if (request.sort) params.set("sort", request.sort);
3211
3352
  return {
3212
3353
  path: `/v1/desktop/sessions?${params}`,
3213
3354
  method: "GET"
@@ -4153,6 +4294,23 @@ function desktopEndpoint(request) {
4153
4294
  path: `/v1/auth/providers/${request.provider}/credentials`,
4154
4295
  method: "DELETE"
4155
4296
  };
4297
+ case "agent_messages.status":
4298
+ return {
4299
+ path: `/v1/desktop/team-bridge/status?boundary=${request.boundary}`,
4300
+ method: "GET"
4301
+ };
4302
+ case "agent_messages.enable":
4303
+ return {
4304
+ path: "/v1/desktop/team-bridge/settings",
4305
+ method: "PUT",
4306
+ body: {
4307
+ expected_account_id: request.expected_account_id,
4308
+ tenant_id: request.tenant_id,
4309
+ state: request.state,
4310
+ consent_version: request.consent_version,
4311
+ consented_via: request.consented_via
4312
+ }
4313
+ };
4156
4314
  case "settings.list":
4157
4315
  return { path: "/v1/settings", method: "GET" };
4158
4316
  case "settings.edit":
@@ -31654,6 +31812,24 @@ var IntlMessageFormat = class IntlMessageFormat2 {
31654
31812
  };
31655
31813
  }
31656
31814
  };
31815
+ const enUiAgentMessages = {
31816
+ "ui.agentMessages.dialog.title": "Agent messages on Radient",
31817
+ "ui.agentMessages.dialog.lead": "Your agent can exchange messages with other members' agents in your organization.",
31818
+ "ui.agentMessages.dialog.reach": "By default only agents of members in your organization can reach you; change this in Settings → Agent messages.",
31819
+ "ui.agentMessages.dialog.later": "You can enable this later in Settings → Agent messages.",
31820
+ "ui.agentMessages.dialog.activities": "Exchange notes, ask questions, and send approval requests.",
31821
+ "ui.agentMessages.dialog.enable": "Enable",
31822
+ "ui.agentMessages.dialog.enabling": "Enabling…",
31823
+ "ui.agentMessages.dialog.not_now": "Not now",
31824
+ "ui.agentMessages.dialog.close": "Close",
31825
+ "ui.agentMessages.dialog.consent_unavailable": "Consent is unavailable. Agent messages have not been enabled.",
31826
+ "ui.agentMessages.dialog.account_guard_unavailable": "This version cannot safely enable agent messages for your account. Update Local Operator, then try again.",
31827
+ "ui.agentMessages.dialog.failure": "Agent messages could not be enabled. Try again, or enable this later in Settings → Agent messages.",
31828
+ "ui.agentMessages.dialog.consent_changed": "Read the current consent text below, then choose Enable again.",
31829
+ "ui.agentMessages.dialog.local_failure": "Your consent was saved, but setup on this machine did not finish. Open Settings → Agent messages to finish setup.",
31830
+ "ui.agentMessages.dialog.validation_detail": "{field}: {rule}",
31831
+ "ui.agentMessages.dialog.validation_failure": "This setup request was not accepted. Update Local Operator, then try again."
31832
+ };
31657
31833
  const enUiAgentsDialogs = {
31658
31834
  "ui.agents.dialogs.create.title": "Create new agent",
31659
31835
  "ui.agents.dialogs.create.cancel": "Cancel",
@@ -31690,6 +31866,46 @@ const enUiAgentsDialogs = {
31690
31866
  "ui.agents.dialogs.import.invalid_zip": "Only ZIP files are supported"
31691
31867
  };
31692
31868
  const enUiAgents = {};
31869
+ const enUiAgentsModels = {
31870
+ "ui.agents.models.reading.title": "Model and effort",
31871
+ "ui.agents.models.reading.description": "What each member runs on, and which layer set it.",
31872
+ "ui.agents.models.reading.member_col": "Member",
31873
+ "ui.agents.models.reading.model_col": "Model",
31874
+ "ui.agents.models.reading.effort_col": "Effort",
31875
+ "ui.agents.models.reading.session_model": "the launching session's model",
31876
+ "ui.agents.models.reading.not_resolved": "not resolved",
31877
+ "ui.agents.models.reading.tier_layer": "tier {tier} ({source})",
31878
+ "ui.agents.models.reading.effort_auto": "auto",
31879
+ "ui.agents.models.reading.effort_clamped": "{requested} → {value}",
31880
+ "ui.agents.models.reading.effort_default": "model default",
31881
+ "ui.agents.models.reading.unavailable": "{member} cannot start: {reason}",
31882
+ "ui.agents.models.reading.unavailable_editor": "Saved setting — {member} cannot start: {reason}",
31883
+ "ui.agents.models.reading.unavailable_hint": "Add the tier in Settings.",
31884
+ "ui.agents.models.reading.read_failed": "The effective models could not be read, so overrides cannot be edited.",
31885
+ "ui.agents.models.reading.try_again": "Try again",
31886
+ "ui.agents.models.reading.refreshing": "Updating…",
31887
+ "ui.agents.models.reading.no_probe_hint": "Save the team to set per-member model overrides.",
31888
+ "ui.agents.models.reading.saved_label": "Saved",
31889
+ "ui.agents.models.reading.model_cell": "Model: {value}",
31890
+ "ui.agents.models.reading.model_cell_layer": "Model: {value} ({layer})",
31891
+ "ui.agents.models.reading.effort_cell": "Effort: {value}",
31892
+ "ui.agents.models.reading.effort_cell_layer": "Effort: {value} ({layer})",
31893
+ "ui.agents.models.source.team": "from this team",
31894
+ "ui.agents.models.source.row": "from the agent",
31895
+ "ui.agents.models.source.none": "no override",
31896
+ "ui.agents.models.source.tier": "the tier map",
31897
+ "ui.agents.models.source.session": "the session",
31898
+ "ui.agents.models.source.model_default": "the model's default",
31899
+ "ui.agents.models.override.scope_hint": "A member's override here applies to this team only, and takes priority over the agent's own tier and effort.",
31900
+ "ui.agents.models.override.tier_label": "Effort tier for {member}",
31901
+ "ui.agents.models.override.tier_field": "Effort tier",
31902
+ "ui.agents.models.override.effort_label": "Reasoning effort for {member}",
31903
+ "ui.agents.models.override.effort_field": "Reasoning effort",
31904
+ "ui.agents.models.override.inherit_tier": "Inherit (agent's tier)",
31905
+ "ui.agents.models.override.inherit_effort": "Inherit (agent's effort)",
31906
+ "ui.agents.models.override.auto": "Auto (model default)",
31907
+ "ui.agents.models.pin_reach": "This effort tier is used by {count, plural, one {{count, number, ::group-off} team} other {{count, number, ::group-off} teams}}: {teams}"
31908
+ };
31693
31909
  const enUiAgentsNavigation = {
31694
31910
  "ui.agents.navigation.updates.preview.empty": "No differences to show: the hub's version matches yours.",
31695
31911
  "ui.agents.navigation.updates.preview.local": "Yours",
@@ -32108,7 +32324,7 @@ const enUiCanvas = {
32108
32324
  "ui.canvas.files.error": "Could not load session files",
32109
32325
  "ui.canvas.files.remote": "Remote files are unavailable here",
32110
32326
  "ui.canvas.files.inSession": "In session",
32111
- "ui.canvas.files.count": "{count, plural, one {# file} other {# files}}",
32327
+ "ui.canvas.files.count": "{count, plural, one {{count, number, ::group-off} file} other {{count, number, ::group-off} files}}",
32112
32328
  "ui.canvas.files.narrowCount": "{shown} of {total} files",
32113
32329
  "ui.canvas.files.gone": "No longer in the session",
32114
32330
  "ui.canvas.files.earlier": "Search earlier messages",
@@ -32150,7 +32366,7 @@ const enUiChatSidebarView = {
32150
32366
  "ui.chat.sidebar_view.clock_hint": "Dates and ordering follow the selected clock.",
32151
32367
  "ui.chat.sidebar_view.move_up": "Move {section} up",
32152
32368
  "ui.chat.sidebar_view.move_down": "Move {section} down",
32153
- "ui.chat.sidebar_view.hidden": "{count, plural, one {# section hidden} other {# sections hidden}}",
32369
+ "ui.chat.sidebar_view.hidden": "{count, plural, one {{count, number, ::group-off} section hidden} other {{count, number, ::group-off} sections hidden}}",
32154
32370
  "ui.chat.sidebar_view.section.pinned": "Pinned",
32155
32371
  "ui.chat.sidebar_view.section.running": "Running",
32156
32372
  "ui.chat.sidebar_view.section.today": "Today",
@@ -32547,21 +32763,21 @@ const enUiCommonUpdates = {
32547
32763
  "ui.common.updates.update_quiet_indicator.application_update": "Application update",
32548
32764
  "ui.common.updates.update_quiet_indicator.dismiss_update_notice": "Dismiss update notice",
32549
32765
  "ui.common.updates.update_quiet_indicator.server_update": "Server update",
32550
- "ui.common.updates.wait.minutes": "Waiting {minutes, plural, one {# minute} other {# minutes}} so far",
32551
- "ui.common.updates.wait.minutes_seconds": "Waiting {minutes, plural, one {# minute} other {# minutes}} {seconds, plural, one {# second} other {# seconds}} so far",
32552
- "ui.common.updates.wait.seconds": "Waiting {seconds, plural, one {# second} other {# seconds}} so far"
32766
+ "ui.common.updates.wait.minutes": "Waiting {minutes, plural, one {{minutes, number, ::group-off} minute} other {{minutes, number, ::group-off} minutes}} so far",
32767
+ "ui.common.updates.wait.minutes_seconds": "Waiting {minutes, plural, one {{minutes, number, ::group-off} minute} other {{minutes, number, ::group-off} minutes}} {seconds, plural, one {{seconds, number, ::group-off} second} other {{seconds, number, ::group-off} seconds}} so far",
32768
+ "ui.common.updates.wait.seconds": "Waiting {seconds, plural, one {{seconds, number, ::group-off} second} other {{seconds, number, ::group-off} seconds}} so far"
32553
32769
  };
32554
32770
  const enUiConsole = {
32555
- "ui.console.capacity.summary": "{live, number} live of {limit, number} in the app",
32556
- "ui.console.capacity.summary_compact": "{live, number}/{limit, number} · {archived, number} kept",
32557
- "ui.console.capacity.summary_compact_bare": "{live, number}/{limit, number}",
32558
- "ui.console.capacity.archived": " · {archived, number} kept",
32771
+ "ui.console.capacity.summary": "{live, number, ::group-off} live of {limit, number, ::group-off} in the app",
32772
+ "ui.console.capacity.summary_compact": "{live, number, ::group-off}/{limit, number, ::group-off} · {archived, number, ::group-off} kept",
32773
+ "ui.console.capacity.summary_compact_bare": "{live, number, ::group-off}/{limit, number, ::group-off}",
32774
+ "ui.console.capacity.archived": " · {archived, number, ::group-off} kept",
32559
32775
  "ui.console.capacity.full": " · full",
32560
32776
  "ui.console.capacity.help": "App-wide counts, across every conversation. Kept history does not use a process slot.",
32561
- "ui.console.capacity.resources": "Modeled managed storage: {memory, number} MiB. Logs: {logs, number} MiB. Pending output: {pending, number} MiB. Terminal cells: {cells, number}. Protected terminals: {protected, number}. This excludes child-process memory.",
32777
+ "ui.console.capacity.resources": "Modeled managed storage: {memory, number, ::group-off} MiB. Logs: {logs, number, ::group-off} MiB. Pending output: {pending, number, ::group-off} MiB. Terminal cells: {cells, number, ::group-off}. Protected terminals: {protected, number, ::group-off}. This excludes child-process memory.",
32562
32778
  "ui.console.cleanup.label": "Clear finished agent terminals",
32563
32779
  "ui.console.cleanup.help": "Clears finished agent terminals in this conversation. Finished ones the agent asked to keep stay on disk; the rest are closed and their output is not kept. Terminals you opened, and any in use, are left alone.",
32564
- "ui.console.cleanup.result": "Cleared {released, plural, one {# finished agent terminal} other {# finished agent terminals}}. {protected, plural, =0 {} one {# is still in use and was left open.} other {# are still in use and were left open.}}",
32780
+ "ui.console.cleanup.result": "Cleared {released, plural, one {{released, number, ::group-off} finished agent terminal} other {{released, number, ::group-off} finished agent terminals}}. {protected, plural, =0 {} one {{protected, number, ::group-off} is still in use and was left open.} other {{protected, number, ::group-off} are still in use and were left open.}}",
32565
32781
  "ui.console.cleanup.result_none": "Nothing to clear — no finished agent terminals in this conversation.",
32566
32782
  "ui.console.dismiss_history": "Clear terminal and delete retained output",
32567
32783
  "ui.console.dismiss.body": "Clearing this terminal deletes its retained output from disk, so a relaunch cannot restore it.",
@@ -32600,9 +32816,9 @@ const enUiConsole = {
32600
32816
  "ui.console.tab.ended": "ended",
32601
32817
  "ui.console.tab.agent_opened": "An agent opened this console",
32602
32818
  "ui.console.tab.agent_typed": "An agent has typed into this console",
32603
- "ui.console.tab.close_label": "Close {title}, tab {index, number} of {total, number}",
32604
- "ui.console.tab.clear_label": "Clear {title}, tab {index, number} of {total, number}",
32605
- "ui.console.tab.clear_label_retained": "Clear {title}, tab {index, number} of {total, number} — deletes retained output",
32819
+ "ui.console.tab.close_label": "Close {title}, tab {index, number, ::group-off} of {total, number, ::group-off}",
32820
+ "ui.console.tab.clear_label": "Clear {title}, tab {index, number, ::group-off} of {total, number, ::group-off}",
32821
+ "ui.console.tab.clear_label_retained": "Clear {title}, tab {index, number, ::group-off} of {total, number, ::group-off} — deletes retained output",
32606
32822
  "ui.console.secure_toggle.stop": "Stop secure input",
32607
32823
  "ui.console.secure_toggle.start": "Secure input",
32608
32824
  "ui.console.secure_toggle.start_tooltip": "Secure input: stop recording this terminal",
@@ -32718,7 +32934,7 @@ const enUiHub = {
32718
32934
  "ui.hub.skills.publish_title": "Publish a skill",
32719
32935
  "ui.hub.skills.select_authored": "Authored skill",
32720
32936
  "ui.hub.skills.revision": "Remote revision: {revision}",
32721
- "ui.hub.skills.file_count": "{count, plural, one {# file included} other {# files included}}",
32937
+ "ui.hub.skills.file_count": "{count, plural, one {{count, number, ::group-off} file included} other {{count, number, ::group-off} files included}}",
32722
32938
  "ui.hub.skills.files": "Files included",
32723
32939
  "ui.hub.skills.text_limits": "Skills support up to 64 UTF-8 text files, 200 KiB per file and 1 MiB in total. Scripts are never run when publishing or pulling.",
32724
32940
  "ui.hub.skills.local_exists": "That local alias is already used. Choose another.",
@@ -32737,7 +32953,7 @@ const enUiHub = {
32737
32953
  "ui.hub.status.unknown": "Status unavailable.",
32738
32954
  "ui.hub.status.next_retry": "Next retry: {time}",
32739
32955
  "ui.hub.status.last_checked": "Last checked: {time}",
32740
- "ui.hub.status.attempts": "{count, plural, one {# attempt} other {# attempts}}",
32956
+ "ui.hub.status.attempts": "{count, plural, one {{count, number, ::group-off} attempt} other {{count, number, ::group-off} attempts}}",
32741
32957
  "ui.hub.status.receipt": "Operation receipt: {operation}",
32742
32958
  "ui.hub.status.core_update_required": "Update the Local Operator backend to a published release {minimum} or newer to change Hub settings. Browsing is still available.",
32743
32959
  "ui.hub.status.backend_checking": "Checking the Local Operator backend before allowing Hub changes. Browsing is still available.",
@@ -32781,11 +32997,11 @@ const enUiHub = {
32781
32997
  "ui.hub.status.transport_error": "Couldn't reach the hub. A retry is scheduled.",
32782
32998
  "ui.hub.links.scope_placeholder": "Choose a scope…",
32783
32999
  "ui.hub.links.scope_required": "Choose a scope to continue",
32784
- "ui.hub.links.sources_count": "{count, plural, one {# source} other {# sources}}",
32785
- "ui.hub.links.links_count": "{count, plural, one {# link} other {# links}}",
33000
+ "ui.hub.links.sources_count": "{count, plural, one {{count, number, ::group-off} source} other {{count, number, ::group-off} sources}}",
33001
+ "ui.hub.links.links_count": "{count, plural, one {{count, number, ::group-off} link} other {{count, number, ::group-off} links}}",
32786
33002
  "ui.hub.links.unresolved_mark": "{item}: source not confirmed. Confirm the source.",
32787
33003
  "ui.hub.links.mixed": "Mixed",
32788
- "ui.hub.links.aggregate_mark": "{count, plural, one {# link} other {# links}}; {state}",
33004
+ "ui.hub.links.aggregate_mark": "{count, plural, one {{count, number, ::group-off} link} other {{count, number, ::group-off} links}}; {state}",
32789
33005
  "ui.hub.links.mark_healthy": "up to date",
32790
33006
  "ui.hub.links.mark_review": "needs review",
32791
33007
  "ui.hub.links.mark_failed": "failed",
@@ -32879,7 +33095,7 @@ const enUiMesh = {
32879
33095
  "ui.mesh.mesh_approvals_tray.after_a_stop": "After a stop",
32880
33096
  "ui.mesh.mesh_approvals_tray.the_runner_stopped_before_it_finished_abandoning": "The runner stopped before it finished. Abandoning denies the request; a retry re-enters the same record instead.",
32881
33097
  "ui.mesh.mesh_approvals_tray.approvals": "Approvals",
32882
- "ui.mesh.mesh_approvals_tray.waiting_count": "{count, plural, one {# waiting} other {# waiting}}",
33098
+ "ui.mesh.mesh_approvals_tray.waiting_count": "{count, plural, one {{count, number, ::group-off} waiting} other {{count, number, ::group-off} waiting}}",
32883
33099
  "ui.mesh.mesh_approvals_tray.ask_again": "Ask again",
32884
33100
  "ui.mesh.mesh_approvals_tray.settled_approvals": "Settled approvals",
32885
33101
  "ui.mesh.mesh_approvals_tray.the_runner_stopped_before_it_finished_it": "The runner stopped before it finished. It stays retryable until its window closes; Abandon denies the request.",
@@ -32936,8 +33152,8 @@ const enUiMesh = {
32936
33152
  "ui.mesh.mesh_approvals.borrow_the_logins_stored_there": "borrow the logins stored there",
32937
33153
  "ui.mesh.mesh_approvals.answer_approval_prompts_there": "answer approval prompts there",
32938
33154
  "ui.mesh.mesh_approvals.expires_in_under_a_minute": "expires in under a minute",
32939
- "ui.mesh.mesh_approvals.expires_minutes": "expires in {count, plural, one {# minute} other {# minutes}}",
32940
- "ui.mesh.mesh_approvals.expires_hours": "expires in {count, plural, one {# hour} other {# hours}}",
33155
+ "ui.mesh.mesh_approvals.expires_minutes": "expires in {count, plural, one {{count, number, ::group-off} minute} other {{count, number, ::group-off} minutes}}",
33156
+ "ui.mesh.mesh_approvals.expires_hours": "expires in {count, plural, one {{count, number, ::group-off} hour} other {{count, number, ::group-off} hours}}",
32941
33157
  "ui.mesh.mesh_approvals.the_approvals_could_not_be_read": "The approvals could not be read.",
32942
33158
  "ui.mesh.mesh_canvas.networks": "Networks",
32943
33159
  "ui.mesh.mesh_canvas.devices": "Devices",
@@ -32945,9 +33161,9 @@ const enUiMesh = {
32945
33161
  "ui.mesh.mesh_card.copy_here_leave_it_there": "Copy here, leave it there",
32946
33162
  "ui.mesh.mesh_card.move_to": "Move to {device}",
32947
33163
  "ui.mesh.mesh_card.copy_to": "Copy to {device}",
32948
- "ui.mesh.mesh_card.conversation_count": "{count, plural, one {# conversation} other {# conversations}}",
33164
+ "ui.mesh.mesh_card.conversation_count": "{count, plural, one {{count, number, ::group-off} conversation} other {{count, number, ::group-off} conversations}}",
32949
33165
  "ui.mesh.mesh_card.revoked_membership": "revoked membership",
32950
- "ui.mesh.mesh_card.shown_of": "{shown, number} of {total, number}",
33166
+ "ui.mesh.mesh_card.shown_of": "{shown, number, ::group-off} of {total, number, ::group-off}",
32951
33167
  "ui.mesh.mesh_card.device_details": "{device} details",
32952
33168
  "ui.mesh.mesh_card.memberships": "Memberships",
32953
33169
  "ui.mesh.mesh_card.revoked": " · revoked",
@@ -32991,31 +33207,31 @@ const enUiMesh = {
32991
33207
  "ui.mesh.mesh_graph.self_conversations": "this device · {conversations}",
32992
33208
  "ui.mesh.mesh_graph.identity_suspect": "identity suspect",
32993
33209
  "ui.mesh.mesh_graph.no_sessions_reported": "no sessions reported",
32994
- "ui.mesh.mesh_graph.network_count": "{count, plural, one {# network} other {# networks}}",
32995
- "ui.mesh.mesh_graph.device_count": "{count, plural, one {# device} other {# devices}}",
32996
- "ui.mesh.mesh_graph.suspected_count": "{count, plural, other {# of them suspected}}",
32997
- "ui.mesh.mesh_graph.reached_count": "{count, plural, other {# reached}}",
32998
- "ui.mesh.mesh_graph.no_answer_count": "{count, plural, other {# no answer}}",
32999
- "ui.mesh.mesh_graph.not_asked_count": "{count, plural, other {# not asked}}",
33000
- "ui.mesh.mesh_graph.unknown_count": "{count, plural, other {# unknown}}",
33210
+ "ui.mesh.mesh_graph.network_count": "{count, plural, one {{count, number, ::group-off} network} other {{count, number, ::group-off} networks}}",
33211
+ "ui.mesh.mesh_graph.device_count": "{count, plural, one {{count, number, ::group-off} device} other {{count, number, ::group-off} devices}}",
33212
+ "ui.mesh.mesh_graph.suspected_count": "{count, plural, other {{count, number, ::group-off} of them suspected}}",
33213
+ "ui.mesh.mesh_graph.reached_count": "{count, plural, other {{count, number, ::group-off} reached}}",
33214
+ "ui.mesh.mesh_graph.no_answer_count": "{count, plural, other {{count, number, ::group-off} no answer}}",
33215
+ "ui.mesh.mesh_graph.not_asked_count": "{count, plural, other {{count, number, ::group-off} not asked}}",
33216
+ "ui.mesh.mesh_graph.unknown_count": "{count, plural, other {{count, number, ::group-off} unknown}}",
33001
33217
  "ui.mesh.mesh_graph.self_identity": "this device is {device}",
33002
33218
  "ui.mesh.mesh_list.name": "Name",
33003
33219
  "ui.mesh.mesh_list.state": "State",
33004
33220
  "ui.mesh.mesh_list.on_device_state": "on {device}{state}",
33005
33221
  "ui.mesh.mesh_list.on_device_no_answer": "on {device} (not answering)",
33006
33222
  "ui.mesh.mesh_list.sort_devices_by": "Sort devices by",
33007
- "ui.mesh.mesh_list.epoch": "epoch {epoch, number}",
33008
- "ui.mesh.mesh_list.revoked_count": " · {count, plural, other {# revoked}}",
33223
+ "ui.mesh.mesh_list.epoch": "epoch {epoch, number, ::group-off}",
33224
+ "ui.mesh.mesh_list.revoked_count": " · {count, plural, other {{count, number, ::group-off} revoked}}",
33009
33225
  "ui.mesh.mesh_list.revoked": "revoked",
33010
33226
  "ui.mesh.mesh_list.member": "member",
33011
33227
  "ui.mesh.mesh_list.move_conversation": "Move {conversation}",
33012
- "ui.mesh.mesh_list.show_all_panel": "show all {count, plural, other {# in the panel}}",
33228
+ "ui.mesh.mesh_list.show_all_panel": "show all {count, plural, other {{count, number, ::group-off} in the panel}}",
33013
33229
  "ui.mesh.mesh_list.answered_the_peer_read_but_is_in": "answered the peer read but is in no network this app can name.",
33014
33230
  "ui.mesh.mesh_node.on_device": "on {device}",
33015
33231
  "ui.mesh.mesh_node.working": "working",
33016
33232
  "ui.mesh.mesh_node.conversations_on": "Conversations on {device}",
33017
- "ui.mesh.mesh_node.shown_conversations": "Showing {shown, number} of {total, plural, one {# conversations} other {# conversations}}",
33018
- "ui.mesh.mesh_node.show_all_conversations": "Show all {count, plural, one {# conversations} other {# conversations}}",
33233
+ "ui.mesh.mesh_node.shown_conversations": "Showing {shown, number, ::group-off} of {total, plural, one {{total, number, ::group-off} conversations} other {{total, number, ::group-off} conversations}}",
33234
+ "ui.mesh.mesh_node.show_all_conversations": "Show all {count, plural, one {{count, number, ::group-off} conversations} other {{count, number, ::group-off} conversations}}",
33019
33235
  "ui.mesh.mesh_node.open_conversation": "{conversation}, {fact}. Opens {owner}.",
33020
33236
  "ui.mesh.mesh_page.canvas": "Canvas",
33021
33237
  "ui.mesh.mesh_page.list": "List",
@@ -33047,11 +33263,11 @@ const enUiMesh = {
33047
33263
  "ui.mesh.mesh_actions.this_moves_the_conversation": "This moves the conversation.",
33048
33264
  "ui.mesh.mesh_actions.the_device": "the device",
33049
33265
  "ui.mesh.mesh_approvals.decision_could_not_be_answered": "The decision could not be answered.",
33050
- "ui.mesh.mesh_node.memberships": "· {count, plural, one {# networks} other {# networks}}",
33266
+ "ui.mesh.mesh_node.memberships": "· {count, plural, one {{count, number, ::group-off} networks} other {{count, number, ::group-off} networks}}",
33051
33267
  "ui.mesh.mesh_graph.conversation_unit": "{count, plural, one {conversation} other {conversations}}",
33052
- "ui.mesh.mesh_approvals_tray.failed_count": "{count, plural, other {# failed}}",
33268
+ "ui.mesh.mesh_approvals_tray.failed_count": "{count, plural, other {{count, number, ::group-off} failed}}",
33053
33269
  "ui.mesh.mesh_list.sort_conversations": "Conversations",
33054
- "ui.mesh.mesh_list.conversation_count": "{count, plural, =0 {no conversations} one {# conversation} other {# conversations}}",
33270
+ "ui.mesh.mesh_list.conversation_count": "{count, plural, =0 {no conversations} one {{count, number, ::group-off} conversation} other {{count, number, ::group-off} conversations}}",
33055
33271
  "ui.mesh.approval.credential_title": "Credential access request",
33056
33272
  "ui.mesh.approval.unknown_title": "Approval request",
33057
33273
  "ui.mesh.approval.details_unavailable": "The full request details are unavailable in this app. Review the request from the command line on this machine.",
@@ -33107,8 +33323,8 @@ const enUiOnboarding = {
33107
33323
  "ui.onboarding.search.row.save_failed": "The key could not be saved.",
33108
33324
  "ui.onboarding.search.row.saved": "Saved",
33109
33325
  "ui.onboarding.search.row.saving": "Saving {name}",
33110
- "ui.onboarding.modal.step_of": "Step {current, number} of {total, number}",
33111
- "ui.onboarding.modal.steps_total": "{total, plural, one {# step} other {# steps}}"
33326
+ "ui.onboarding.modal.step_of": "Step {current, number, ::group-off} of {total, number, ::group-off}",
33327
+ "ui.onboarding.modal.steps_total": "{total, plural, one {{total, number, ::group-off} step} other {{total, number, ::group-off} steps}}"
33112
33328
  };
33113
33329
  const enUiProjects = {};
33114
33330
  const enUiProviders = {
@@ -33159,7 +33375,7 @@ const enUiProviders = {
33159
33375
  "ui.providers.connect_provider_dialog.your_agents_need_a_model_to_think": "Your agents need a model to think with. Sign in with an account you already have, or add an API key.",
33160
33376
  "ui.providers.provider_catalog.local_models": "local models",
33161
33377
  "ui.providers.provider_catalog.more_providers": "More providers",
33162
- "ui.providers.provider_catalog.more_providers_and": "More providers: {providers} and {count, plural, other {# more}}",
33378
+ "ui.providers.provider_catalog.more_providers_and": "More providers: {providers} and {count, plural, other {{count, number, ::group-off} more}}",
33163
33379
  "ui.providers.provider_catalog.more_providers_variant_41": "More providers: {provider}",
33164
33380
  "ui.providers.provider_catalog.more_providers_and_variant_42": "More providers: {providers} and {last}",
33165
33381
  "ui.providers.provider_catalog.claude_subscription": "Claude subscription",
@@ -33299,8 +33515,8 @@ const enUiProviders = {
33299
33515
  "ui.providers.sign_in_flow.sign_in_could_not_start": "Sign-in could not start.",
33300
33516
  "ui.providers.provider_detail.the_sign_in_page": "the sign-in page",
33301
33517
  "ui.providers.provider_grid.row_action": "{action}: {brand}",
33302
- "ui.providers.provider_detail.code_expiry": "Code expires in {minutes, plural, other {# min}}",
33303
- "ui.providers.provider_detail.link_expiry": "Link expires in {minutes, plural, other {# min}}"
33518
+ "ui.providers.provider_detail.code_expiry": "Code expires in {minutes, plural, other {{minutes, number, ::group-off} min}}",
33519
+ "ui.providers.provider_detail.link_expiry": "Link expires in {minutes, plural, other {{minutes, number, ::group-off} min}}"
33304
33520
  };
33305
33521
  const enUiSchedules = {
33306
33522
  "ui.schedules.count.hidden": "Show {hidden, plural, one {{hidden, number, ::group-off} more wake} other {{hidden, number, ::group-off} more wakes}}",
@@ -33499,8 +33715,8 @@ const enUiSettingsAccount = {
33499
33715
  "ui.settings.account.settings_page.tokens": "Tokens",
33500
33716
  "ui.settings.account.settings_usage_chart.credits_consumed": "Credits consumed",
33501
33717
  "ui.settings.account.settings_usage_chart.tokens_used": "Tokens used",
33502
- "ui.settings.account.settings_usage_chart.credits_summary": "Credits consumed over the last 30 days, plotted per day across {days, plural, one {# day} other {# days}}.",
33503
- "ui.settings.account.settings_usage_chart.tokens_summary": "Tokens used over the last 30 days, plotted per day across {days, plural, one {# day} other {# days}}.",
33718
+ "ui.settings.account.settings_usage_chart.credits_summary": "Credits consumed over the last 30 days, plotted per day across {days, plural, one {{days, number, ::group-off} day} other {{days, number, ::group-off} days}}.",
33719
+ "ui.settings.account.settings_usage_chart.tokens_summary": "Tokens used over the last 30 days, plotted per day across {days, plural, one {{days, number, ::group-off} day} other {{days, number, ::group-off} days}}.",
33504
33720
  "ui.settings.account.settings_page.credit_balance_load_failed": "Could not load your credit balance. {reason}",
33505
33721
  "ui.settings.account.settings_page.usage_load_failed": "Could not load your usage data. {reason}"
33506
33722
  };
@@ -33549,10 +33765,10 @@ const enUiSettingsConfiguration = {
33549
33765
  "ui.settings.configuration.language_dialog.the_language_could_not_be_saved": "The language could not be saved.",
33550
33766
  "ui.settings.configuration.language_dialog.your_settings_could_not_be_loaded": "Your settings could not be loaded.",
33551
33767
  "ui.settings.configuration.retention_duration.enter_a_whole_number_of_hours_or_days": "Enter a whole number of hours or days.",
33552
- "ui.settings.configuration.retention_duration.month_count": "{count, plural, one {# month} other {# months}}",
33553
- "ui.settings.configuration.retention_duration.day_count": "{count, plural, one {# day} other {# days}}",
33554
- "ui.settings.configuration.retention_duration.hour_count": "{count, plural, one {# hour} other {# hours}}",
33555
- "ui.settings.configuration.retention_duration.maximum_days": "{duration} ({days, plural, one {# day} other {# days}})",
33768
+ "ui.settings.configuration.retention_duration.month_count": "{count, plural, one {{count, number, ::group-off} month} other {{count, number, ::group-off} months}}",
33769
+ "ui.settings.configuration.retention_duration.day_count": "{count, plural, one {{count, number, ::group-off} day} other {{count, number, ::group-off} days}}",
33770
+ "ui.settings.configuration.retention_duration.hour_count": "{count, plural, one {{count, number, ::group-off} hour} other {{count, number, ::group-off} hours}}",
33771
+ "ui.settings.configuration.retention_duration.maximum_days": "{duration} ({days, plural, one {{days, number, ::group-off} day} other {{days, number, ::group-off} days}})",
33556
33772
  "ui.settings.configuration.retention_duration.range": "between {minimum} and {maximum}",
33557
33773
  "ui.settings.configuration.retention_duration.too_long": "{duration} is too long. Choose a time {range}.",
33558
33774
  "ui.settings.configuration.retention_duration.too_short": "{duration} is too short. Choose a time {range}.",
@@ -33585,11 +33801,11 @@ const enUiSettingsConfiguration = {
33585
33801
  "ui.settings.configuration.settings_filter_bar.collapse_all": "Collapse all",
33586
33802
  "ui.settings.configuration.settings_filter_bar.saving": "Saving",
33587
33803
  "ui.settings.configuration.settings_filter_bar.save_all": "Save all",
33588
- "ui.settings.configuration.settings_filter_bar.unsaved_count": "{count, plural, one {# unsaved change} other {# unsaved changes}}",
33589
- "ui.settings.configuration.settings_filter_bar.search_count": "{matchCount, plural, one {# result} other {# results}} in {sectionCount, plural, one {# section} other {# sections}}",
33590
- "ui.settings.configuration.settings_filter_bar.modified_count": "{count, plural, one {# modified setting} other {# modified settings}}",
33804
+ "ui.settings.configuration.settings_filter_bar.unsaved_count": "{count, plural, one {{count, number, ::group-off} unsaved change} other {{count, number, ::group-off} unsaved changes}}",
33805
+ "ui.settings.configuration.settings_filter_bar.search_count": "{matchCount, plural, one {{matchCount, number, ::group-off} result} other {{matchCount, number, ::group-off} results}} in {sectionCount, plural, one {{sectionCount, number, ::group-off} section} other {{sectionCount, number, ::group-off} sections}}",
33806
+ "ui.settings.configuration.settings_filter_bar.modified_count": "{count, plural, one {{count, number, ::group-off} modified setting} other {{count, number, ::group-off} modified settings}}",
33591
33807
  "ui.settings.configuration.settings_group_header.changed_from_the_default": "Changed from the default",
33592
- "ui.settings.configuration.settings_group_header.setting_count": "{count, plural, one {# setting} other {# settings}}",
33808
+ "ui.settings.configuration.settings_group_header.setting_count": "{count, plural, one {{count, number, ::group-off} setting} other {{count, number, ::group-off} settings}}",
33593
33809
  "ui.settings.configuration.settings_page.configuration_information": "Configuration information",
33594
33810
  "ui.settings.configuration.settings_page.system_information_about_the_current_configuration": "System information about the current configuration.",
33595
33811
  "ui.settings.configuration.settings_page.version": "Version",
@@ -33602,13 +33818,13 @@ const enUiSettingsConfiguration = {
33602
33818
  "ui.settings.configuration.delegated_retention_copy.kept": "Kept:",
33603
33819
  "ui.settings.configuration.delegated_retention_copy.when": "When:",
33604
33820
  "ui.settings.configuration.backend_setting_row.gate_note": "Needs {gate} on. Nothing here is saved while it is off.",
33605
- "ui.settings.configuration.backend_settings_section.show_advanced_count": "{count, plural, one {Show # advanced} other {Show # advanced}}",
33606
- "ui.settings.configuration.settings_group_header.advanced_count": "{count, plural, one {# advanced} other {# advanced}}",
33821
+ "ui.settings.configuration.backend_settings_section.show_advanced_count": "{count, plural, one {Show {count, number, ::group-off} advanced} other {Show {count, number, ::group-off} advanced}}",
33822
+ "ui.settings.configuration.settings_group_header.advanced_count": "{count, plural, one {{count, number, ::group-off} advanced} other {{count, number, ::group-off} advanced}}",
33607
33823
  "ui.settings.configuration.retention_duration_control.idle_window_status": "{duration} with no activity{isDefault, select, yes { (default)} other {}}",
33608
33824
  "ui.settings.configuration.retention_duration_control.use_duration": "Use {duration}",
33609
33825
  "ui.settings.configuration.retention_duration_control.duration_default": "{duration} (default)",
33610
- "ui.settings.configuration.settings_filter_bar.advanced_shown": "{count, plural, one {# advanced setting shown — Expand all to see it} other {# advanced settings shown — Expand all to see them}}",
33611
- "ui.settings.configuration.settings_filter_bar.core_and_advanced": "{coreCount, plural, one {# core setting} other {# core settings}}, {advancedCount, plural, one {# advanced} other {# advanced}}"
33826
+ "ui.settings.configuration.settings_filter_bar.advanced_shown": "{count, plural, one {{count, number, ::group-off} advanced setting shown — Expand all to see it} other {{count, number, ::group-off} advanced settings shown — Expand all to see them}}",
33827
+ "ui.settings.configuration.settings_filter_bar.core_and_advanced": "{coreCount, plural, one {{coreCount, number, ::group-off} core setting} other {{coreCount, number, ::group-off} core settings}}, {advancedCount, plural, one {{advancedCount, number, ::group-off} advanced} other {{advancedCount, number, ::group-off} advanced}}"
33612
33828
  };
33613
33829
  const enUiSettingsIntegrations = {
33614
33830
  "ui.settings.integrations.add_integration_form.add_integration": "Add integration",
@@ -33739,10 +33955,10 @@ const enUiSettingsIntegrations = {
33739
33955
  "ui.settings.integrations.integration_model.the_config_file_couldn_t_be_written_check_that_it_isn_t_read_only": "The config file couldn't be written. Check that it isn't read-only.",
33740
33956
  "ui.settings.integrations.integration_model.integrations_are_still_starting_try_again_in_a_moment": "Integrations are still starting. Try again in a moment.",
33741
33957
  "ui.settings.integrations.integration_model.the_server_refused_it_so_nothing_was_changed": "The server refused it, so nothing was changed.",
33742
- "ui.settings.integrations.integration_model.tool_count": "{count, plural, one {# tool} other {# tools}}",
33743
- "ui.settings.integrations.integration_model.integration_count": "{count, plural, one {# integration} other {# integrations}}",
33744
- "ui.settings.integrations.integration_model.minutes_min_ago": "{minutes, plural, one {# min ago} other {# min ago}}",
33745
- "ui.settings.integrations.integration_model.hours_h_ago": "{hours, plural, one {# h ago} other {# h ago}}",
33958
+ "ui.settings.integrations.integration_model.tool_count": "{count, plural, one {{count, number, ::group-off} tool} other {{count, number, ::group-off} tools}}",
33959
+ "ui.settings.integrations.integration_model.integration_count": "{count, plural, one {{count, number, ::group-off} integration} other {{count, number, ::group-off} integrations}}",
33960
+ "ui.settings.integrations.integration_model.minutes_min_ago": "{minutes, plural, one {{minutes, number, ::group-off} min ago} other {{minutes, number, ::group-off} min ago}}",
33961
+ "ui.settings.integrations.integration_model.hours_h_ago": "{hours, plural, one {{hours, number, ::group-off} h ago} other {{hours, number, ::group-off} h ago}}",
33746
33962
  "ui.settings.integrations.integration_model.imported_from_origin": "Imported from {origin}",
33747
33963
  "ui.settings.integrations.integration_model.remove_in_origin": "Remove in {origin}",
33748
33964
  "ui.settings.integrations.integration_model.defined_in_origin_s_config_remove_it_there": "Defined in {origin}'s config. Remove it there.",
@@ -33820,7 +34036,7 @@ const enUiSettingsIntegrations = {
33820
34036
  "ui.settings.integrations.integration_key_dialog.saving": "Saving…",
33821
34037
  "ui.settings.integrations.mcp_management_section.borrowed_chat_notice": "Showing the integrations for {chat}, your most recent chat.",
33822
34038
  "ui.settings.integrations.integration_sign_in_dialog.browser_approval_notice": "Local Operator opens your browser so you can approve access to {name}.{replaces, select, yes { This replaces the sign-in it has now.} other {}}",
33823
- "ui.settings.integrations.integration_model.days_ago": "{days, plural, one {# d ago} other {# d ago}}",
34039
+ "ui.settings.integrations.integration_model.days_ago": "{days, plural, one {{days, number, ::group-off} d ago} other {{days, number, ::group-off} d ago}}",
33824
34040
  "ui.settings.integrations.integration_model.connected_with_tools": "Connected · {tools}",
33825
34041
  "ui.settings.integrations.integration_model.worked_when_with_tools": "Worked {when} · {tools}",
33826
34042
  "ui.settings.integrations.integration_model.worked_earlier_with_tools": "Worked earlier · {tools}",
@@ -34045,6 +34261,155 @@ const enUiShellRail = {
34045
34261
  "ui.shell.rail.console.tooltip": "{state, select, open {Close console{chord}} other {Open console{chord}}}",
34046
34262
  "ui.shell.rail.console.tooltip_count": "{state, select, open {Close console{chord}} other {Open console{chord}}} — {count, plural, one {{countText} finished since you looked} other {{countText} finished since you looked}}"
34047
34263
  };
34264
+ const esUiConsole = {
34265
+ "ui.console.capacity.summary": "{live, number, ::group-off} activas de {limit, number, ::group-off} en la app",
34266
+ "ui.console.capacity.summary_compact": "{live, number, ::group-off}/{limit, number, ::group-off} · {archived, plural, one {{archived, number, ::group-off} conservado} many {{archived, number, ::group-off} de conservados} other {{archived, number, ::group-off} conservados}}",
34267
+ "ui.console.capacity.summary_compact_bare": "{live, number, ::group-off}/{limit, number, ::group-off}",
34268
+ "ui.console.capacity.archived": " · {archived, plural, one {{archived, number, ::group-off} conservado} many {{archived, number, ::group-off} de conservados} other {{archived, number, ::group-off} conservados}}",
34269
+ "ui.console.capacity.full": " · sin plazas libres",
34270
+ "ui.console.capacity.help": "El recuento abarca toda la app y todas las conversaciones. El historial conservado no ocupa una plaza de proceso.",
34271
+ "ui.console.capacity.resources": "Almacenamiento gestionado estimado: {memory, number, ::group-off} MiB. Registros: {logs, number, ::group-off} MiB. Salida pendiente: {pending, number, ::group-off} MiB. Celdas de terminal: {cells, number, ::group-off}. Terminales protegidas: {protected, number, ::group-off}. No incluye la memoria de los procesos hijo.",
34272
+ "ui.console.cleanup.label": "Eliminar terminales de agentes finalizadas",
34273
+ "ui.console.cleanup.help": "Elimina las terminales de agentes finalizadas de esta conversación. Las que el agente pidió conservar siguen en el disco; las demás se cierran y su salida no se conserva. Las terminales que abriste tú y las que siguen en uso no se modifican.",
34274
+ "ui.console.cleanup.result": "{released, plural, one {Se eliminó {released, number, ::group-off} terminal de agente finalizada} many {Se eliminaron {released, number, ::group-off} de terminales de agentes finalizadas} other {Se eliminaron {released, number, ::group-off} terminales de agentes finalizadas}}. {protected, plural, =0 {} one {{protected, number, ::group-off} sigue en uso y se dejó abierta.} many {{protected, number, ::group-off} de terminales siguen en uso y se dejaron abiertas.} other {{protected, number, ::group-off} siguen en uso y se dejaron abiertas.}}",
34275
+ "ui.console.cleanup.result_none": "Nada que eliminar — no hay terminales de agentes finalizadas en esta conversación.",
34276
+ "ui.console.dismiss_history": "Eliminar terminal y borrar la salida conservada",
34277
+ "ui.console.dismiss.body": "Al eliminar esta terminal, se borra del disco la salida conservada, por lo que no se podrá restaurar al volver a iniciar la app.",
34278
+ "ui.console.dismiss.title": "¿Eliminar esta terminal?",
34279
+ "ui.console.dismiss.confirm": "Eliminar terminal",
34280
+ "ui.console.close.body": "Esto termina el programa que se ejecuta aquí y elimina su pestaña.",
34281
+ "ui.console.close.busy": "Cerrando…",
34282
+ "ui.console.close.confirm": "Cerrar terminal",
34283
+ "ui.console.close.kept": "Su salida se conserva.",
34284
+ "ui.console.close.title": "¿Cerrar esta terminal?",
34285
+ "ui.console.create_failed.detail": "El proceso de la consola está activo, pero ha rechazado iniciar un programa para esta conversación — ha fallado este intento, no se ha desactivado la consola. Primero, vuelve a intentarlo; si sigue fallando, el texto de abajo indica el motivo que dio ese proceso.",
34286
+ "ui.console.create_failed.retry": "Volver a intentar",
34287
+ "ui.console.create_failed.title": "No se pudo iniciar la consola en esta sesión",
34288
+ "ui.console.empty.detail": "Una consola ejecuta un programa en la carpeta de esta conversación y conserva su salida, aunque este panel esté cerrado.",
34289
+ "ui.console.empty.title": "No hay ninguna consola en esta sesión",
34290
+ "ui.console.ended.exit_code": "código de salida {code}",
34291
+ "ui.console.ended.exit_unknown": "código de salida no observado",
34292
+ "ui.console.ended.live": "Esta terminal ha finalizado",
34293
+ "ui.console.ended.restored": "Esta terminal ha finalizado y se ha restaurado su historial",
34294
+ "ui.console.loading.create": "Iniciando una consola",
34295
+ "ui.console.loading.read": "Leyendo la consola de esta sesión",
34296
+ "ui.console.new": "Nueva consola",
34297
+ "ui.console.pane.blip": "Finalizó después de tu última consulta",
34298
+ "ui.console.pane.close": "Cerrar consola",
34299
+ "ui.console.pane.close_refusal": "No se pudo cerrar la terminal.",
34300
+ "ui.console.pane.label": "Consola",
34301
+ "ui.console.pane.needs_conversation.detail": "Una consola se ejecuta en la carpeta de trabajo de una conversación, así que aún no hay dónde crearla.",
34302
+ "ui.console.pane.needs_conversation.title": "La consola necesita una conversación",
34303
+ "ui.console.pane.surfaces": "Terminales de la consola",
34304
+ "ui.console.secure": "La entrada segura está activada: lo que escribes aquí no se registra.",
34305
+ "ui.console.unavailable.disabled.detail": "LOCAL_OPERATOR_UI_CONSOLE_HOST tiene el valor 0 en el entorno de esta app, por lo que no se inicia ninguna terminal ni se puede crear ninguna terminal de la consola. Elimina ese ajuste para volver a activar la consola.",
34306
+ "ui.console.unavailable.disabled.title": "La consola está desactivada en esta ejecución",
34307
+ "ui.console.unavailable.pty.detail": "No se cargó el soporte para terminales en esta ejecución. Se restaura al actualizar Local Operator; el registro de la app indica el motivo.",
34308
+ "ui.console.unavailable.title": "La consola no está disponible en esta app",
34309
+ "ui.console.unavailable.unknown.detail": "Esta ventana no pudo acceder a la consola y no indicó por qué. El registro de la app contiene el motivo.",
34310
+ "ui.console.tab.ended": "finalizada",
34311
+ "ui.console.tab.agent_opened": "Un agente abrió esta consola",
34312
+ "ui.console.tab.agent_typed": "Un agente ha escrito en esta consola",
34313
+ "ui.console.tab.close_label": "Cerrar {title}, pestaña {index, number, ::group-off} de {total, number, ::group-off}",
34314
+ "ui.console.tab.clear_label": "Eliminar {title}, pestaña {index, number, ::group-off} de {total, number, ::group-off}",
34315
+ "ui.console.tab.clear_label_retained": "Eliminar {title}, pestaña {index, number, ::group-off} de {total, number, ::group-off} — borra la salida conservada",
34316
+ "ui.console.secure_toggle.stop": "Desactivar la entrada segura",
34317
+ "ui.console.secure_toggle.start": "Entrada segura",
34318
+ "ui.console.secure_toggle.start_tooltip": "Entrada segura: dejar de registrar esta terminal",
34319
+ "ui.console.close.cancel": "Cancelar",
34320
+ "ui.console.terminal.prompt_label": "Entrada de la terminal",
34321
+ "ui.console.terminal.too_much_output": "Hay demasiada salida para leerla en voz alta. Recorre las filas manualmente para leerla."
34322
+ };
34323
+ const esUiOnboarding = {
34324
+ "ui.onboarding.connect.intro": "Local Operator necesita una cuenta de IA para funcionar. Radient es la opción más sencilla: inicia sesión en el navegador, sin copiar ni pegar nada. ¿Ya pagas por ChatGPT o Claude? Puedes usar esa cuenta. Abre la lista de proveedores de abajo para ver las demás opciones.",
34325
+ "ui.onboarding.default_model.block.loading_models": "Cargando la lista de modelos…",
34326
+ "ui.onboarding.default_model.block.pick_a_model": "Elige un modelo para continuar.",
34327
+ "ui.onboarding.default_model.change": "Cambiar",
34328
+ "ui.onboarding.default_model.connected_pick": "{brand} está conectado. Elige el modelo para los nuevos chats.",
34329
+ "ui.onboarding.default_model.empty_helper": "Aún no hay proveedores conectados. Vuelve al paso anterior para conectar uno.",
34330
+ "ui.onboarding.default_model.fallback_name": "Modelo predeterminado de {brand}",
34331
+ "ui.onboarding.default_model.intro": "Los nuevos chats usan este modelo. Cada agente puede elegir otro más adelante.",
34332
+ "ui.onboarding.default_model.loading": "Cargando tus modelos",
34333
+ "ui.onboarding.default_model.none_connected": "Aún no hay ningún proveedor conectado. Vuelve atrás para conectar uno, o salta la configuración y conéctalo luego desde el chat.",
34334
+ "ui.onboarding.default_model.nothing_saved": "No se guardará nada: tu Local Operator aún no puede listar los modelos de {brand}, así que la configuración termina sin un modelo predeterminado. Elige uno en Ajustes antes de enviar tu primer mensaje.",
34335
+ "ui.onboarding.default_model.provider_fallback": "este proveedor",
34336
+ "ui.onboarding.default_model.tag.applied": "tu modelo predeterminado",
34337
+ "ui.onboarding.default_model.tag.suggested": "sugerido para tu cuenta",
34338
+ "ui.onboarding.dialog.setup": "Configuración",
34339
+ "ui.onboarding.extras.greeting_done": "{name} es tu jefa de gabinete. Puedes retomar su conversación desde la barra lateral con solo pulsar una tecla. También puedes ir directamente a un nuevo chat.",
34340
+ "ui.onboarding.extras.greeting_owed": "{name} es tu jefa de gabinete. Ella te saludará primero, te preguntará cómo llamarte y en qué necesitas ayuda, y te enseñará a usar la app. También puedes ir directamente a un nuevo chat.",
34341
+ "ui.onboarding.extras.next_meet": "Siguiente: conocer a {name}",
34342
+ "ui.onboarding.modal.action.back": "Volver",
34343
+ "ui.onboarding.modal.action.continue": "Continuar",
34344
+ "ui.onboarding.modal.action.finish": "Finalizar",
34345
+ "ui.onboarding.modal.action.meet": "Conocer a {name}",
34346
+ "ui.onboarding.modal.action.skip": "Saltar",
34347
+ "ui.onboarding.modal.action.skip_for_now": "Saltar por ahora",
34348
+ "ui.onboarding.modal.action.skip_to_chat": "Ir al chat",
34349
+ "ui.onboarding.modal.error.aida_open_failed": "No se pudo abrir la conversación con {name}, así que estás en un nuevo chat.",
34350
+ "ui.onboarding.modal.title.connect_provider": "Conectar una cuenta de IA",
34351
+ "ui.onboarding.modal.title.default_model": "Tu modelo predeterminado",
34352
+ "ui.onboarding.modal.title.extras": "Búsqueda web (opcional)",
34353
+ "ui.onboarding.modal.title.extras_with_name": "Búsqueda web; después, conoce a {name}",
34354
+ "ui.onboarding.modal.title.fallback": "Configuración inicial",
34355
+ "ui.onboarding.search.each_key_saved": "Cada clave se guarda en tu dispositivo en cuanto sales de su campo.",
34356
+ "ui.onboarding.search.intro": "Los agentes pueden buscar información mientras trabajan — los precios de hoy, las noticias de esta semana — en vez de depender de lo que el modelo ya sabe.",
34357
+ "ui.onboarding.search.mode.free": "Gratis",
34358
+ "ui.onboarding.search.mode.free_detail": "Alterna entre proveedores gratuitos — DuckDuckGo, el plan gratuito de Tavily, Exa y Parallel. No necesitas ninguna clave; el servicio se comparte, así que las búsquedas pueden tardar más cuando hay mucha demanda.",
34359
+ "ui.onboarding.search.mode.keys": "Añadir claves de API",
34360
+ "ui.onboarding.search.mode.keys_detail": "Usa tus propias claves de los proveedores de búsqueda que utilizas.",
34361
+ "ui.onboarding.search.mode.label": "Configuración de búsqueda",
34362
+ "ui.onboarding.search.recommended": "Recomendado",
34363
+ "ui.onboarding.search.row.get_your": "Obtener {name}",
34364
+ "ui.onboarding.search.row.not_saved": "No guardada — {message}",
34365
+ "ui.onboarding.search.row.placeholder": "Pega tu clave de API",
34366
+ "ui.onboarding.search.row.save_failed": "No se pudo guardar la clave.",
34367
+ "ui.onboarding.search.row.saved": "Guardada",
34368
+ "ui.onboarding.search.row.saving": "Guardando {name}",
34369
+ "ui.onboarding.modal.step_of": "Paso {current, number, ::group-off} de {total, number, ::group-off}",
34370
+ "ui.onboarding.modal.steps_total": "{total, plural, one {{total, number, ::group-off} paso} many {{total, number, ::group-off} de pasos} other {{total, number, ::group-off} pasos}}"
34371
+ };
34372
+ const esUiSettings = {
34373
+ "ui.settings.language.dialog.description": "Se aplica a la app y a la terminal — es el mismo ajuste que se cambia en la página de ajustes.",
34374
+ "ui.settings.language.dialog.loading": "Cargando el ajuste actual…",
34375
+ "ui.settings.language.dialog.retry": "Reintentar",
34376
+ "ui.settings.language.dialog.retrying": "Reintentando",
34377
+ "ui.settings.language.dialog.save": "Guardar",
34378
+ "ui.settings.language.dialog.saved": "Guardado",
34379
+ "ui.settings.language.dialog.title": "Idioma de la interfaz",
34380
+ "ui.settings.language.dialog.unavailable": "El servicio conectado no ofrece los ajustes que se editan en este diálogo.",
34381
+ "ui.settings.language.effective": "Idioma activo: {locale}",
34382
+ "ui.settings.language.external_notice": "El idioma de la interfaz cambió desde otro lugar — ahora es {language}.",
34383
+ "ui.settings.language.general.description": "Elige el idioma de la app y la terminal. Los cambios se guardan al instante; las conversaciones existentes no se reescriben.",
34384
+ "ui.settings.language.general.effective": "Idioma activo de la app: {locale}",
34385
+ "ui.settings.language.general.last_known": "Último idioma sincronizado de la app: {locale}",
34386
+ "ui.settings.language.general.no_resolution": "Aún no se ha establecido el idioma de la app.",
34387
+ "ui.settings.language.general.pending": "Guardando el idioma…",
34388
+ "ui.settings.language.general.readback_error": "Se confirmó el cambio, pero no se pudo comprobar el ajuste actual. Vuelve a conectarte o reinténtalo antes de cambiarlo de nuevo.",
34389
+ "ui.settings.language.general.saved": "Idioma guardado.",
34390
+ "ui.settings.language.general.system": "Usar el del sistema",
34391
+ "ui.settings.language.general.unavailable_choice": "No disponible",
34392
+ "ui.settings.language.general.write_error": "No se guardó el idioma. Tu ajuste anterior no ha cambiado. {message}",
34393
+ "ui.settings.language.palette_action": "Cambiar el idioma de la interfaz",
34394
+ "ui.settings.page.title": "Ajustes",
34395
+ "ui.settings.profile.description_anonymous": "Los datos de tu perfil que se muestran en la app. No se comparten con los agentes.",
34396
+ "ui.settings.profile.description_authenticated": "Los datos de tu perfil que se muestran en la app. No se comparten con los agentes. Estos datos provienen de tu cuenta de Radient.",
34397
+ "ui.settings.profile.display_name.label": "Nombre visible",
34398
+ "ui.settings.profile.display_name.placeholder": "Escribe tu nombre…",
34399
+ "ui.settings.profile.email.label": "Correo electrónico",
34400
+ "ui.settings.profile.email.placeholder": "Escribe tu correo…",
34401
+ "ui.settings.profile.title": "Perfil de usuario",
34402
+ "ui.settings.section.interface_language.help": "Idioma de la interfaz, un ajuste compartido con la terminal. auto sigue el idioma del sistema operativo y usa el inglés si no está disponible.",
34403
+ "ui.settings.section.interface_language.label": "Idioma de la interfaz",
34404
+ "ui.settings.tour.action": "Iniciar el recorrido",
34405
+ "ui.settings.tour.description": "¿Te saltaste el recorrido inicial de la app o quieres repasarlo? Puedes volver a iniciarlo aquí.",
34406
+ "ui.settings.tour.title": "Recorrido de la app",
34407
+ "ui.settings.profile.account_checking": "Comprobando tu cuenta de Radient…",
34408
+ "ui.settings.profile.account_read_failed_retry": "No se pudo consultar tu cuenta de Radient, así que el nombre y el correo que aparecen abajo son datos de ejemplo, no los de tu cuenta. Reinténtalo.",
34409
+ "ui.settings.profile.account_read_failed_refused": "No se pudo consultar tu cuenta de Radient, así que el nombre y el correo que aparecen abajo son datos de ejemplo, no los de tu cuenta. Reinténtalo o vuelve a iniciar sesión en Radient.",
34410
+ "ui.settings.profile.retry": "Reintentar",
34411
+ "ui.settings.profile.retrying": "Reintentando"
34412
+ };
34048
34413
  const frUiConsole = {
34049
34414
  "ui.console.close.body": "Le programme en cours sera arrêté et son onglet supprimé.",
34050
34415
  "ui.console.close.busy": "Fermeture…",
@@ -34076,16 +34441,16 @@ const frUiConsole = {
34076
34441
  "ui.console.unavailable.pty.detail": "La prise en charge des terminaux n’a pas été chargée pour cette exécution. Une mise à jour de Local Operator la rétablit ; le journal de l’application indique la cause.",
34077
34442
  "ui.console.unavailable.title": "La console est indisponible dans cette application",
34078
34443
  "ui.console.unavailable.unknown.detail": "Cette fenêtre n’a pas pu accéder à la console et n’a pas indiqué pourquoi. Le journal de l’application précise la cause.",
34079
- "ui.console.capacity.summary": "{live, number} sur {limit, number} actifs dans l’app",
34080
- "ui.console.capacity.summary_compact": "{live, number}/{limit, number} · {archived, plural, one {# gardé} many {# de gardés} other {# gardés}}",
34081
- "ui.console.capacity.summary_compact_bare": "{live, number}/{limit, number}",
34082
- "ui.console.capacity.archived": " · {archived, plural, one {# gardé} many {# de gardés} other {# gardés}}",
34444
+ "ui.console.capacity.summary": "{live, number, ::group-off} sur {limit, number, ::group-off} actifs dans l’app",
34445
+ "ui.console.capacity.summary_compact": "{live, number, ::group-off}/{limit, number, ::group-off} · {archived, plural, one {{archived, number, ::group-off} gardé} many {{archived, number, ::group-off} de gardés} other {{archived, number, ::group-off} gardés}}",
34446
+ "ui.console.capacity.summary_compact_bare": "{live, number, ::group-off}/{limit, number, ::group-off}",
34447
+ "ui.console.capacity.archived": " · {archived, plural, one {{archived, number, ::group-off} gardé} many {{archived, number, ::group-off} de gardés} other {{archived, number, ::group-off} gardés}}",
34083
34448
  "ui.console.capacity.full": " · plein",
34084
34449
  "ui.console.capacity.help": "Compteurs pour toute l’application, toutes conversations confondues. L’historique conservé n’occupe pas d’emplacement de processus.",
34085
- "ui.console.capacity.resources": "Stockage géré estimé : {memory, number} MiB. Journaux : {logs, number} MiB. Sortie en attente : {pending, number} MiB. Cellules de terminal : {cells, number}. Terminaux protégés : {protected, number}. La mémoire des processus enfants n’est pas incluse.",
34450
+ "ui.console.capacity.resources": "Stockage géré estimé : {memory, number, ::group-off} MiB. Journaux : {logs, number, ::group-off} MiB. Sortie en attente : {pending, number, ::group-off} MiB. Cellules de terminal : {cells, number, ::group-off}. Terminaux protégés : {protected, number, ::group-off}. La mémoire des processus enfants n’est pas incluse.",
34086
34451
  "ui.console.cleanup.label": "Effacer les terminaux d’agent terminés",
34087
34452
  "ui.console.cleanup.help": "Efface les terminaux d’agent terminés de cette conversation. Ceux que l’agent a demandé de conserver restent sur le disque ; les autres sont fermés et leur sortie n’est pas conservée. Les terminaux que vous avez ouverts, ainsi que ceux en cours d’utilisation, ne sont pas touchés.",
34088
- "ui.console.cleanup.result": "Effacé : {released, plural, one {# terminal d’agent terminé} many {# de terminaux d’agent terminés} other {# terminaux d’agent terminés}}. {protected, plural, =0 {} one {# terminal est encore utilisé et a été laissé ouvert.} many {# de terminaux sont encore utilisés et ont été laissés ouverts.} other {# terminaux sont encore utilisés et ont été laissés ouverts.}}",
34453
+ "ui.console.cleanup.result": "Effacé : {released, plural, one {{released, number, ::group-off} terminal d’agent terminé} many {{released, number, ::group-off} de terminaux d’agent terminés} other {{released, number, ::group-off} terminaux d’agent terminés}}. {protected, plural, =0 {} one {{protected, number, ::group-off} terminal est encore utilisé et a été laissé ouvert.} many {{protected, number, ::group-off} de terminaux sont encore utilisés et ont été laissés ouverts.} other {{protected, number, ::group-off} terminaux sont encore utilisés et ont été laissés ouverts.}}",
34089
34454
  "ui.console.cleanup.result_none": "Rien à effacer — aucun terminal d’agent terminé dans cette conversation.",
34090
34455
  "ui.console.dismiss_history": "Effacer le terminal et supprimer la sortie conservée",
34091
34456
  "ui.console.dismiss.body": "Effacer ce terminal supprime sa sortie conservée sur le disque ; une relance ne pourra pas la restaurer.",
@@ -34094,9 +34459,9 @@ const frUiConsole = {
34094
34459
  "ui.console.tab.ended": "terminé",
34095
34460
  "ui.console.tab.agent_opened": "Un agent a ouvert cette console",
34096
34461
  "ui.console.tab.agent_typed": "Un agent a saisi du texte dans cette console",
34097
- "ui.console.tab.close_label": "Fermer {title}, onglet {index, number} sur {total, number}",
34098
- "ui.console.tab.clear_label": "Effacer {title}, onglet {index, number} sur {total, number}",
34099
- "ui.console.tab.clear_label_retained": "Effacer {title}, onglet {index, number} sur {total, number} — supprime la sortie conservée",
34462
+ "ui.console.tab.close_label": "Fermer {title}, onglet {index, number, ::group-off} sur {total, number, ::group-off}",
34463
+ "ui.console.tab.clear_label": "Effacer {title}, onglet {index, number, ::group-off} sur {total, number, ::group-off}",
34464
+ "ui.console.tab.clear_label_retained": "Effacer {title}, onglet {index, number, ::group-off} sur {total, number, ::group-off} — supprime la sortie conservée",
34100
34465
  "ui.console.secure_toggle.stop": "Arrêter la saisie sécurisée",
34101
34466
  "ui.console.secure_toggle.start": "Saisie sécurisée",
34102
34467
  "ui.console.secure_toggle.start_tooltip": "Saisie sécurisée : arrêter l’enregistrement de ce terminal",
@@ -34150,8 +34515,8 @@ const frUiOnboarding = {
34150
34515
  "ui.onboarding.search.row.save_failed": "La clé n’a pas pu être enregistrée.",
34151
34516
  "ui.onboarding.search.row.saved": "Enregistré",
34152
34517
  "ui.onboarding.search.row.saving": "Enregistrement : {name}",
34153
- "ui.onboarding.modal.step_of": "Étape {current, number} sur {total, number}",
34154
- "ui.onboarding.modal.steps_total": "{total, plural, one {# étape} many {# d’étapes} other {# étapes}}"
34518
+ "ui.onboarding.modal.step_of": "Étape {current, number, ::group-off} sur {total, number, ::group-off}",
34519
+ "ui.onboarding.modal.steps_total": "{total, plural, one {{total, number, ::group-off} étape} many {{total, number, ::group-off} d’étapes} other {{total, number, ::group-off} étapes}}"
34155
34520
  };
34156
34521
  const frUiSettings = {
34157
34522
  "ui.settings.language.dialog.description": "S’applique à l’application et au terminal — le même réglage que dans les paramètres.",
@@ -34194,9 +34559,160 @@ const frUiSettings = {
34194
34559
  "ui.settings.profile.retry": "Réessayer",
34195
34560
  "ui.settings.profile.retrying": "Nouvel essai"
34196
34561
  };
34562
+ const ruUiConsole = {
34563
+ "ui.console.capacity.summary": "Активных терминалов в приложении: {live, number, ::group-off} из {limit, number, ::group-off}",
34564
+ "ui.console.capacity.summary_compact": "{live, number, ::group-off}/{limit, number, ::group-off} · сохранено: {archived, number, ::group-off}",
34565
+ "ui.console.capacity.summary_compact_bare": "{live, number, ::group-off}/{limit, number, ::group-off}",
34566
+ "ui.console.capacity.archived": " · сохранено: {archived, number, ::group-off}",
34567
+ "ui.console.capacity.full": " · лимит достигнут",
34568
+ "ui.console.capacity.help": "Общее число терминалов приложения во всех разговорах. Сохранённая история не занимает место для процесса.",
34569
+ "ui.console.capacity.resources": "Расчётный объём управляемого хранилища: {memory, number, ::group-off} MiB. Журналы: {logs, number, ::group-off} MiB. Вывод в ожидании: {pending, number, ::group-off} MiB. Ячейки терминала: {cells, number, ::group-off}. Защищённые терминалы: {protected, number, ::group-off}. Память дочерних процессов не учитывается.",
34570
+ "ui.console.cleanup.label": "Очистить завершённые терминалы агентов",
34571
+ "ui.console.cleanup.help": "Очищает завершённые терминалы агентов в этом разговоре. Если агент попросил сохранить завершённый терминал, тот остаётся на диске; остальные закрываются без сохранения вывода. Терминалы, открытые вами, и все используемые терминалы остаются без изменений.",
34572
+ "ui.console.cleanup.result": "Очищено: {released, plural, one {{released, number, ::group-off} завершённый терминал агента} few {{released, number, ::group-off} завершённых терминала агентов} many {{released, number, ::group-off} завершённых терминалов агентов} other {{released, number, ::group-off} завершённого терминала агентов}}. {protected, plural, =0 {} one {{protected, number, ::group-off} терминал ещё используется и оставлен открытым.} few {{protected, number, ::group-off} терминала ещё используются и оставлены открытыми.} many {{protected, number, ::group-off} терминалов ещё используются и оставлены открытыми.} other {{protected, number, ::group-off} терминала ещё используются и оставлены открытыми.}}",
34573
+ "ui.console.cleanup.result_none": "Нечего очищать — в этом разговоре нет завершённых терминалов агентов.",
34574
+ "ui.console.dismiss_history": "Очистить терминал и удалить сохранённый вывод",
34575
+ "ui.console.dismiss.body": "При очистке этого терминала сохранённый вывод удаляется с диска, поэтому после перезапуска его нельзя будет восстановить.",
34576
+ "ui.console.dismiss.title": "Очистить этот терминал?",
34577
+ "ui.console.dismiss.confirm": "Очистить терминал",
34578
+ "ui.console.close.body": "Это завершит работающую здесь программу и удалит её вкладку.",
34579
+ "ui.console.close.busy": "Закрытие…",
34580
+ "ui.console.close.confirm": "Закрыть терминал",
34581
+ "ui.console.close.kept": "Вывод программы сохранится.",
34582
+ "ui.console.close.title": "Закрыть этот терминал?",
34583
+ "ui.console.create_failed.detail": "Сервис консоли работает, но отказался запускать программу для этого разговора — не удалась одна попытка, а сама консоль не отключена. Сначала попробуйте ещё раз. Если ошибка повторится, ниже указана причина, которую сообщил сам сервис.",
34584
+ "ui.console.create_failed.retry": "Попробовать снова",
34585
+ "ui.console.create_failed.title": "Не удалось запустить консоль в этой сессии",
34586
+ "ui.console.empty.detail": "Консоль запускает программу в папке этого разговора и сохраняет её вывод, даже когда эта панель закрыта.",
34587
+ "ui.console.empty.title": "В этой сессии нет консоли",
34588
+ "ui.console.ended.exit_code": "код завершения {code}",
34589
+ "ui.console.ended.exit_unknown": "код завершения не получен",
34590
+ "ui.console.ended.live": "Этот терминал завершил работу",
34591
+ "ui.console.ended.restored": "Этот терминал завершил работу; его история восстановлена",
34592
+ "ui.console.loading.create": "Запуск консоли",
34593
+ "ui.console.loading.read": "Чтение консоли этой сессии",
34594
+ "ui.console.new": "Новая консоль",
34595
+ "ui.console.pane.blip": "Работа завершилась после последнего просмотра",
34596
+ "ui.console.pane.close": "Закрыть консоль",
34597
+ "ui.console.pane.close_refusal": "Не удалось закрыть терминал.",
34598
+ "ui.console.pane.label": "Консоль",
34599
+ "ui.console.pane.needs_conversation.detail": "Консоль запускается в рабочей папке разговора. Пока разговор не выбран, запустить её негде.",
34600
+ "ui.console.pane.needs_conversation.title": "Для консоли нужен разговор",
34601
+ "ui.console.pane.surfaces": "Терминалы консоли",
34602
+ "ui.console.secure": "Защищённый ввод включён: введённый здесь текст не записывается.",
34603
+ "ui.console.unavailable.disabled.detail": "В окружении приложения LOCAL_OPERATOR_UI_CONSOLE_HOST задано значение 0, поэтому терминалы не запускаются и создать новый терминал нельзя. Удалите эту настройку, чтобы снова включить консоль.",
34604
+ "ui.console.unavailable.disabled.title": "Консоль отключена в этом запуске",
34605
+ "ui.console.unavailable.pty.detail": "Поддержка терминала не загрузилась при этом запуске. Обновление Local Operator восстановит её; причина указана в журнале приложения.",
34606
+ "ui.console.unavailable.title": "Консоль недоступна в этом приложении",
34607
+ "ui.console.unavailable.unknown.detail": "Это окно не смогло подключиться к консоли и не сообщило причину. Она указана в журнале приложения.",
34608
+ "ui.console.tab.ended": "завершён",
34609
+ "ui.console.tab.agent_opened": "Агент открыл эту консоль",
34610
+ "ui.console.tab.agent_typed": "Агент вводил текст в этой консоли",
34611
+ "ui.console.tab.close_label": "Закрыть {title}, вкладка {index, number, ::group-off} из {total, number, ::group-off}",
34612
+ "ui.console.tab.clear_label": "Очистить {title}, вкладка {index, number, ::group-off} из {total, number, ::group-off}",
34613
+ "ui.console.tab.clear_label_retained": "Очистить {title}, вкладка {index, number, ::group-off} из {total, number, ::group-off} — сохранённый вывод будет удалён",
34614
+ "ui.console.secure_toggle.stop": "Выключить защищённый ввод",
34615
+ "ui.console.secure_toggle.start": "Защищённый ввод",
34616
+ "ui.console.secure_toggle.start_tooltip": "Защищённый ввод: отключить запись этого терминала",
34617
+ "ui.console.close.cancel": "Отмена",
34618
+ "ui.console.terminal.prompt_label": "Ввод в терминале",
34619
+ "ui.console.terminal.too_much_output": "Слишком много вывода для озвучивания. Для чтения переходите по строкам вручную."
34620
+ };
34621
+ const ruUiOnboarding = {
34622
+ "ui.onboarding.connect.intro": "Для работы Local Operator нужна учётная запись ИИ-сервиса. Проще всего с Radient: достаточно войти в браузере, ничего вставлять не нужно. Уже оплачиваете ChatGPT или Claude? Войдите через этот сервис. Откройте список провайдеров ниже, чтобы увидеть остальные варианты.",
34623
+ "ui.onboarding.default_model.block.loading_models": "Загрузка списка моделей…",
34624
+ "ui.onboarding.default_model.block.pick_a_model": "Выберите модель, чтобы продолжить.",
34625
+ "ui.onboarding.default_model.change": "Изменить",
34626
+ "ui.onboarding.default_model.connected_pick": "Подключение к {brand} настроено. Выберите модель для новых чатов.",
34627
+ "ui.onboarding.default_model.empty_helper": "Провайдеры ещё не подключены. Вернитесь на шаг назад, чтобы подключить один из них.",
34628
+ "ui.onboarding.default_model.fallback_name": "Модель по умолчанию — {brand}",
34629
+ "ui.onboarding.default_model.intro": "Эта модель используется в новых чатах. Позже каждый агент может выбрать другую.",
34630
+ "ui.onboarding.default_model.loading": "Загрузка ваших моделей",
34631
+ "ui.onboarding.default_model.none_connected": "Провайдеры ещё не подключены. Вернитесь и подключите один из них или пропустите настройку и подключите его позже из чата.",
34632
+ "ui.onboarding.default_model.nothing_saved": "Ничего не будет сохранено: Local Operator пока не может получить список моделей ({brand}), поэтому настройка завершится без модели по умолчанию. Выберите её в настройках до первого сообщения.",
34633
+ "ui.onboarding.default_model.provider_fallback": "этот провайдер",
34634
+ "ui.onboarding.default_model.tag.applied": "по умолчанию",
34635
+ "ui.onboarding.default_model.tag.suggested": "рекомендуется для вашей учётной записи",
34636
+ "ui.onboarding.dialog.setup": "Настройка",
34637
+ "ui.onboarding.extras.greeting_done": "{name} — ваш координатор. Продолжить общение можно в разговоре с ней: он доступен на боковой панели одним нажатием клавиши. Можно также сразу перейти к новому чату.",
34638
+ "ui.onboarding.extras.greeting_owed": "{name} — ваш координатор. Она первой поздоровается, спросит, как к вам обращаться и с чем помочь, и познакомит вас с приложением. Можно также сразу перейти к новому чату.",
34639
+ "ui.onboarding.extras.next_meet": "Далее — знакомство: {name}",
34640
+ "ui.onboarding.modal.action.back": "Назад",
34641
+ "ui.onboarding.modal.action.continue": "Продолжить",
34642
+ "ui.onboarding.modal.action.finish": "Завершить",
34643
+ "ui.onboarding.modal.action.meet": "Познакомиться с агентом «{name}»",
34644
+ "ui.onboarding.modal.action.skip": "Пропустить",
34645
+ "ui.onboarding.modal.action.skip_for_now": "Пока пропустить",
34646
+ "ui.onboarding.modal.action.skip_to_chat": "Перейти к чату",
34647
+ "ui.onboarding.modal.error.aida_open_failed": "Не удалось открыть разговор с агентом «{name}», поэтому вместо него открыт новый чат.",
34648
+ "ui.onboarding.modal.title.connect_provider": "Подключить учётную запись ИИ-сервиса",
34649
+ "ui.onboarding.modal.title.default_model": "Ваша модель по умолчанию",
34650
+ "ui.onboarding.modal.title.extras": "Поиск в интернете (необязательно)",
34651
+ "ui.onboarding.modal.title.extras_with_name": "Поиск в интернете, затем знакомство: {name}",
34652
+ "ui.onboarding.modal.title.fallback": "Первоначальная настройка",
34653
+ "ui.onboarding.search.each_key_saved": "Каждый ключ сохраняется на устройстве сразу, как только вы покидаете его поле ввода.",
34654
+ "ui.onboarding.search.intro": "Во время работы агенты могут искать актуальные сведения — цены на сегодня, новости за неделю — вместо того, чтобы полагаться лишь на знания модели.",
34655
+ "ui.onboarding.search.mode.free": "Бесплатно",
34656
+ "ui.onboarding.search.mode.free_detail": "Поиск поочерёдно использует бесплатные сервисы: DuckDuckGo, бесплатный тариф Tavily, Exa и Parallel. Ключ не нужен; сервисами пользуются и другие, поэтому при высокой нагрузке поиск может идти медленнее.",
34657
+ "ui.onboarding.search.mode.keys": "Добавить ключи API",
34658
+ "ui.onboarding.search.mode.keys_detail": "Добавьте свои ключи для поисковых сервисов, которыми пользуетесь.",
34659
+ "ui.onboarding.search.mode.label": "Настройка поиска",
34660
+ "ui.onboarding.search.recommended": "Рекомендуется",
34661
+ "ui.onboarding.search.row.get_your": "Получить: {name}",
34662
+ "ui.onboarding.search.row.not_saved": "Не сохранено — {message}",
34663
+ "ui.onboarding.search.row.placeholder": "Вставьте ключ API",
34664
+ "ui.onboarding.search.row.save_failed": "Не удалось сохранить ключ.",
34665
+ "ui.onboarding.search.row.saved": "Сохранено",
34666
+ "ui.onboarding.search.row.saving": "Сохранение: {name}",
34667
+ "ui.onboarding.modal.step_of": "Шаг {current, number, ::group-off} из {total, number, ::group-off}",
34668
+ "ui.onboarding.modal.steps_total": "{total, plural, one {{total, number, ::group-off} шаг} few {{total, number, ::group-off} шага} many {{total, number, ::group-off} шагов} other {{total, number, ::group-off} шага}}"
34669
+ };
34670
+ const ruUiSettings = {
34671
+ "ui.settings.language.dialog.description": "Применяется в приложении и терминале — это та же настройка, что и на странице настроек.",
34672
+ "ui.settings.language.dialog.loading": "Загрузка текущей настройки…",
34673
+ "ui.settings.language.dialog.retry": "Повторить",
34674
+ "ui.settings.language.dialog.retrying": "Повторная попытка",
34675
+ "ui.settings.language.dialog.save": "Сохранить",
34676
+ "ui.settings.language.dialog.saved": "Сохранено",
34677
+ "ui.settings.language.dialog.title": "Язык интерфейса",
34678
+ "ui.settings.language.dialog.unavailable": "Подключённый сервис не предоставляет настройки, которые меняются в этом окне.",
34679
+ "ui.settings.language.effective": "Текущий язык: {locale}",
34680
+ "ui.settings.language.external_notice": "Язык интерфейса изменён в другом месте — теперь {language}.",
34681
+ "ui.settings.language.general.description": "Выберите общий язык приложения и терминала. Изменения сохраняются сразу; текст прежних разговоров не меняется.",
34682
+ "ui.settings.language.general.effective": "Текущий язык приложения: {locale}",
34683
+ "ui.settings.language.general.last_known": "Последний синхронизированный язык приложения: {locale}",
34684
+ "ui.settings.language.general.no_resolution": "Язык приложения ещё не задан.",
34685
+ "ui.settings.language.general.pending": "Сохранение языка…",
34686
+ "ui.settings.language.general.readback_error": "Сохранение подтверждено, но проверить текущую настройку не удалось. Переподключитесь или повторите проверку, прежде чем менять её снова.",
34687
+ "ui.settings.language.general.saved": "Язык сохранён.",
34688
+ "ui.settings.language.general.system": "Как в системе",
34689
+ "ui.settings.language.general.unavailable_choice": "Недоступно",
34690
+ "ui.settings.language.general.write_error": "Язык не сохранён. Прежняя настройка не изменилась. {message}",
34691
+ "ui.settings.language.palette_action": "Изменить язык интерфейса",
34692
+ "ui.settings.page.title": "Настройки",
34693
+ "ui.settings.profile.description_anonymous": "Данные вашего профиля, отображаемые в приложении. Эти сведения не передаются агентам.",
34694
+ "ui.settings.profile.description_authenticated": "Данные вашего профиля, отображаемые в приложении. Эти сведения не передаются агентам. Они получены из вашей учётной записи Radient.",
34695
+ "ui.settings.profile.display_name.label": "Отображаемое имя",
34696
+ "ui.settings.profile.display_name.placeholder": "Введите имя…",
34697
+ "ui.settings.profile.email.label": "Адрес электронной почты",
34698
+ "ui.settings.profile.email.placeholder": "Введите адрес почты…",
34699
+ "ui.settings.profile.title": "Профиль пользователя",
34700
+ "ui.settings.section.interface_language.help": "Язык интерфейса — общая настройка приложения и терминала. auto использует язык операционной системы; если он недоступен, используется английский.",
34701
+ "ui.settings.section.interface_language.label": "Язык интерфейса",
34702
+ "ui.settings.tour.action": "Начать обзор",
34703
+ "ui.settings.tour.description": "Пропустили знакомство с приложением или хотите освежить память? Здесь можно запустить обзор заново.",
34704
+ "ui.settings.tour.title": "Обзор приложения",
34705
+ "ui.settings.profile.account_checking": "Проверка учётной записи Radient…",
34706
+ "ui.settings.profile.account_read_failed_retry": "Не удалось прочитать данные учётной записи Radient, поэтому имя и адрес почты ниже — лишь примеры, а не данные вашей учётной записи. Повторите попытку.",
34707
+ "ui.settings.profile.account_read_failed_refused": "Не удалось прочитать данные учётной записи Radient, поэтому имя и адрес почты ниже — лишь примеры, а не данные вашей учётной записи. Повторите попытку или войдите в Radient заново.",
34708
+ "ui.settings.profile.retry": "Повторить",
34709
+ "ui.settings.profile.retrying": "Повторная попытка"
34710
+ };
34197
34711
  const bundledEnglish = {
34712
+ ...enUiAgentMessages,
34198
34713
  ...enUiAgentsDialogs,
34199
34714
  ...enUiAgents,
34715
+ ...enUiAgentsModels,
34200
34716
  ...enUiAgentsNavigation,
34201
34717
  ...enUiAgentsRefusals,
34202
34718
  ...enUiAgentsSettings,
@@ -34243,10 +34759,20 @@ const bundledEnglish = {
34243
34759
  };
34244
34760
  const bundledCatalogues = {
34245
34761
  en: bundledEnglish,
34762
+ es: {
34763
+ ...esUiConsole,
34764
+ ...esUiOnboarding,
34765
+ ...esUiSettings
34766
+ },
34246
34767
  fr: {
34247
34768
  ...frUiConsole,
34248
34769
  ...frUiOnboarding,
34249
34770
  ...frUiSettings
34771
+ },
34772
+ ru: {
34773
+ ...ruUiConsole,
34774
+ ...ruUiOnboarding,
34775
+ ...ruUiSettings
34250
34776
  }
34251
34777
  };
34252
34778
  const DEFAULT_LOCALE = "en";