local-operator-ui 0.34.50 → 0.34.52
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.
- package/out/main/index.js +591 -1
- package/out/preload/index.js +89 -1
- package/out/renderer/assets/{_basePickBy-CSwEaqGH.js → _basePickBy-jKP04X-l.js} +1 -1
- package/out/renderer/assets/{_baseUniq-ClgJBEui.js → _baseUniq-C1Tb5Z81.js} +1 -1
- package/out/renderer/assets/{agent-details-page-v9g-0tfN.js → agent-details-page-BXYnUttm.js} +2 -2
- package/out/renderer/assets/{agent-hub-page-i9l6Uv6w.js → agent-hub-page-SrDPuy2R.js} +2 -2
- package/out/renderer/assets/{agents-page-BEY9jzic.js → agents-page-BGpbOr-D.js} +3 -3
- package/out/renderer/assets/{arc-Bp2vhvT8.js → arc-C60IJR4W.js} +1 -1
- package/out/renderer/assets/{architectureDiagram-IEHRJDOE-mnxRnj85.js → architectureDiagram-IEHRJDOE-CG2aUgQQ.js} +1 -1
- package/out/renderer/assets/{blockDiagram-JOT3LUYC-Cy0bUbS1.js → blockDiagram-JOT3LUYC-DG6vLb5j.js} +1 -1
- package/out/renderer/assets/{book-open-CwvcZLaU.js → book-open-CqpAQX_h.js} +1 -1
- package/out/renderer/assets/browser-page-C52F14Yv.js +1 -0
- package/out/renderer/assets/browser-webauthn-prompt-BICZWWTE.js +1 -0
- package/out/renderer/assets/{c4Diagram-VJAJSXHY-BLgwrX8R.js → c4Diagram-VJAJSXHY-Dxl-T2ot.js} +1 -1
- package/out/renderer/assets/channel-Yjo7b_td.js +1 -0
- package/out/renderer/assets/{chunk-4BMEZGHF-BKbXn5lz.js → chunk-4BMEZGHF-BTZU1mmj.js} +1 -1
- package/out/renderer/assets/{chunk-A2AXSNBT-huAEN9rv.js → chunk-A2AXSNBT-q4ATawsA.js} +1 -1
- package/out/renderer/assets/{chunk-AEK57VVT-CLlndZHa.js → chunk-AEK57VVT-ZenDipzf.js} +1 -1
- package/out/renderer/assets/{chunk-D6G4REZN-BQoQzkpH.js → chunk-D6G4REZN-LiclW27B.js} +1 -1
- package/out/renderer/assets/{chunk-RZ5BOZE2-BS-67Htk.js → chunk-RZ5BOZE2-rimlHqns.js} +1 -1
- package/out/renderer/assets/{chunk-XZIHB7SX-B413LPHS.js → chunk-XZIHB7SX-W4sbYp78.js} +1 -1
- package/out/renderer/assets/classDiagram-GIVACNV2-Cdmkh24H.js +1 -0
- package/out/renderer/assets/classDiagram-v2-COTLJTTW-Cdmkh24H.js +1 -0
- package/out/renderer/assets/clone-BOQDMNRz.js +1 -0
- package/out/renderer/assets/{console-mirror-atIrzrKQ.js → console-mirror-CqKozfMV.js} +1 -1
- package/out/renderer/assets/{consoleCapture-qbkQDsbk.js → consoleCapture-Dt4bXfA5.js} +1 -1
- package/out/renderer/assets/{conversation-input-sync-B0j1FBwv.js → conversation-input-sync-Bud_iL2h.js} +260 -257
- package/out/renderer/assets/{dagre-OKDRZEBW-fZfOS2dk.js → dagre-OKDRZEBW-DReye3bj.js} +1 -1
- package/out/renderer/assets/{diagram-SSKATNLV-alPaSAsa.js → diagram-SSKATNLV-yQnXG8y9.js} +1 -1
- package/out/renderer/assets/{diagram-VNBRO52H-12nwGS_H.js → diagram-VNBRO52H-Dy1ho1KJ.js} +1 -1
- package/out/renderer/assets/{erDiagram-Q7BY3M3F-C0VQmN1m.js → erDiagram-Q7BY3M3F-MvZHt7NH.js} +1 -1
- package/out/renderer/assets/{error-boundary-C0P2AR1t.js → error-boundary-CnAfZpXJ.js} +1 -1
- package/out/renderer/assets/{flowDiagram-4HSFHLVR-yAA_68VC.js → flowDiagram-4HSFHLVR-BSFgzIoa.js} +1 -1
- package/out/renderer/assets/{ganttDiagram-APWFNJXF-Cbk4f_uq.js → ganttDiagram-APWFNJXF-Dedj3NlS.js} +1 -1
- package/out/renderer/assets/{gitGraphDiagram-7IBYFJ6S-C9o_Zz5H.js → gitGraphDiagram-7IBYFJ6S-Cu4jn0rm.js} +1 -1
- package/out/renderer/assets/{graph-DUT-8BVr.js → graph-CQdRsT3g.js} +1 -1
- package/out/renderer/assets/index-CF-SqRCw.js +57 -0
- package/out/renderer/assets/index-CSvB6_Ie.css +1 -0
- package/out/renderer/assets/{index-lYsxfVy0.js → index-Cq2MGZTE.js} +198 -198
- package/out/renderer/assets/{index-B0uYixKz.js → index-Dv4cmAE_.js} +1 -1
- package/out/renderer/assets/{index-Cun5ZiJ8.js → index-gCeAf81g.js} +1 -1
- package/out/renderer/assets/{infoDiagram-PH2N3AL5-C4KvWN4_.js → infoDiagram-PH2N3AL5-CuAzIGSj.js} +1 -1
- package/out/renderer/assets/{installer-CraQMM0S.js → installer-CNLF7ICd.js} +1 -1
- package/out/renderer/assets/{journeyDiagram-U35MCT3I-ClDn4ZZ_.js → journeyDiagram-U35MCT3I-CWJ2JJ4t.js} +1 -1
- package/out/renderer/assets/{kanban-definition-NDS4AKOZ-DkZ2IqSy.js → kanban-definition-NDS4AKOZ-E-V1z1_U.js} +1 -1
- package/out/renderer/assets/{layout-B2ULRxc7.js → layout-CpEZBnkZ.js} +1 -1
- package/out/renderer/assets/{legacy-agents-page-BHmNHE9c.js → legacy-agents-page-z45uS7-l.js} +5 -5
- package/out/renderer/assets/{mermaid.core-DwfN45qZ.js → mermaid.core-DD0sotYo.js} +5 -5
- package/out/renderer/assets/mesh-page-BwlyEepu.js +1 -0
- package/out/renderer/assets/{mindmap-definition-ALO5MXBD-BaruaCsh.js → mindmap-definition-ALO5MXBD-B83-pecE.js} +1 -1
- package/out/renderer/assets/{mini-y-vZHWd4.js → mini-DtTMJOfC.js} +1 -1
- package/out/renderer/assets/{notebook-pen-Bufwjei-.js → notebook-pen-7O_-yyf1.js} +1 -1
- package/out/renderer/assets/{org-access-BHVNNfiF.js → org-access-CTWNNvUI.js} +1 -1
- package/out/renderer/assets/{org-surface-gate-Bu2ppyy0.js → org-surface-gate-DqM2fDEM.js} +1 -1
- package/out/renderer/assets/{page-header-CzdhP1vT.js → page-header-C9NIPdYQ.js} +1 -1
- package/out/renderer/assets/{pieDiagram-IB7DONF6-D6b-IA5_.js → pieDiagram-IB7DONF6-DdgrLAL8.js} +1 -1
- package/out/renderer/assets/{projects-page-B2p6409_.js → projects-page-Y9v0wFR-.js} +5 -5
- package/out/renderer/assets/{publication-validation-DV7MFEnt.js → publication-validation-DxWRtzXi.js} +1 -1
- package/out/renderer/assets/{quadrantDiagram-7GDLP6J5-BohSnqJt.js → quadrantDiagram-7GDLP6J5-DgXs6rcx.js} +1 -1
- package/out/renderer/assets/{radar-MK3ICKWK-B8IyfRFK.js → radar-MK3ICKWK-FIFs14Hm.js} +1 -1
- package/out/renderer/assets/{radient-auth-buttons-CeAmJxoU.js → radient-auth-buttons-CjTgEezA.js} +1 -1
- package/out/renderer/assets/{requirementDiagram-KVF5MWMF-CjxwfVmm.js → requirementDiagram-KVF5MWMF-DJ_fulOC.js} +1 -1
- package/out/renderer/assets/{sankeyDiagram-QLVOVGJD-Dmb58RjS.js → sankeyDiagram-QLVOVGJD-DkDkmgpo.js} +1 -1
- package/out/renderer/assets/{schedules-page-Dujbkmf1.js → schedules-page-BYp0ooeI.js} +1 -1
- package/out/renderer/assets/{sequenceDiagram-X6HHIX6F-H7CVraeF.js → sequenceDiagram-X6HHIX6F-DslLI_jv.js} +1 -1
- package/out/renderer/assets/{settings-page-tA2lkM1h.js → settings-page-CR012gt8.js} +1 -1
- package/out/renderer/assets/{stateDiagram-DGXRK772-DJN0Rf3F.js → stateDiagram-DGXRK772-WjXX5ZFj.js} +1 -1
- package/out/renderer/assets/stateDiagram-v2-YXO3MK2T-DPmr9Ge_.js +1 -0
- package/out/renderer/assets/{timeline-definition-BDJGKUSR-0g8a7xFr.js → timeline-definition-BDJGKUSR-B5dMwIwc.js} +1 -1
- package/out/renderer/assets/ui-preferences-store-C_k6yzj8.js +1 -0
- package/out/renderer/assets/{use-download-agent-mutation-Doz1TzJr.js → use-download-agent-mutation-Duu1Yzmd.js} +2 -2
- package/out/renderer/assets/{use-memberships-query-CjMpjmh2.js → use-memberships-query-D0178BB5.js} +1 -1
- package/out/renderer/assets/{use-session-snapshot-CoJrqYcV.js → use-session-snapshot-DylLmksx.js} +1 -1
- package/out/renderer/assets/{xychartDiagram-VJFVF3MP-Cn4PWpai.js → xychartDiagram-VJFVF3MP-ClyMBBI3.js} +1 -1
- package/out/renderer/console-capture.html +5 -5
- package/out/renderer/index.html +7 -7
- package/out/renderer/installer.html +4 -4
- package/out/renderer/mini.html +7 -7
- package/package.json +2 -2
- package/out/renderer/assets/browser-page-ffFPxvmW.js +0 -1
- package/out/renderer/assets/browser-webauthn-prompt-CVfiiYOR.js +0 -1
- package/out/renderer/assets/channel-H9kkayno.js +0 -1
- package/out/renderer/assets/classDiagram-GIVACNV2-CBQ7Tucl.js +0 -1
- package/out/renderer/assets/classDiagram-v2-COTLJTTW-CBQ7Tucl.js +0 -1
- package/out/renderer/assets/clone-D41kSeCw.js +0 -1
- package/out/renderer/assets/index-CNvQ9FNg.js +0 -57
- package/out/renderer/assets/index-D-RvJY1X.css +0 -1
- package/out/renderer/assets/mesh-page-BTaA4LA9.js +0 -1
- package/out/renderer/assets/stateDiagram-v2-YXO3MK2T-DTfdA0h1.js +0 -1
- package/out/renderer/assets/ui-preferences-store-B92Xh3eA.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) {
|
|
@@ -588,7 +649,18 @@ const desktopRequestUnion = zod.z.discriminatedUnion("op", [
|
|
|
588
649
|
scope_kind: catalogueScopeKind.optional(),
|
|
589
650
|
scope_name: catalogueScopeName.optional(),
|
|
590
651
|
cursor: catalogueCursor.optional(),
|
|
591
|
-
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()
|
|
592
664
|
}).strict(),
|
|
593
665
|
/*
|
|
594
666
|
* Acknowledge the one-time delegated-cleanup notice:
|
|
@@ -2071,6 +2143,22 @@ const desktopRequestUnion = zod.z.discriminatedUnion("op", [
|
|
|
2071
2143
|
zod.z.object({ op: zod.z.literal("auth.cancel"), id: id$1 }).strict(),
|
|
2072
2144
|
zod.z.object({ op: zod.z.literal("auth.key"), provider: id$1, value: secret }).strict(),
|
|
2073
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(),
|
|
2074
2162
|
zod.z.object({ op: zod.z.literal("settings.list") }).strict(),
|
|
2075
2163
|
zod.z.object({
|
|
2076
2164
|
op: zod.z.literal("settings.edit"),
|
|
@@ -2792,6 +2880,7 @@ const DESKTOP_DEADLINE_EXCEEDED_CODE = "deadline_exceeded";
|
|
|
2792
2880
|
const DESKTOP_FOREGROUND_REQUIRED_MESSAGE = "View these completions in the foreground before marking them read.";
|
|
2793
2881
|
const READ_ONLY_OPS = /* @__PURE__ */ new Set([
|
|
2794
2882
|
"capabilities",
|
|
2883
|
+
"agent_messages.status",
|
|
2795
2884
|
"accounts.list",
|
|
2796
2885
|
"analytics.get",
|
|
2797
2886
|
"analytics.models",
|
|
@@ -3259,6 +3348,7 @@ function desktopEndpoint(request) {
|
|
|
3259
3348
|
if (request.cursor) params.set("cursor", request.cursor);
|
|
3260
3349
|
if (request.with_counts) params.set("with_counts", "true");
|
|
3261
3350
|
if (request.include_peers) params.set("include_peers", "true");
|
|
3351
|
+
if (request.sort) params.set("sort", request.sort);
|
|
3262
3352
|
return {
|
|
3263
3353
|
path: `/v1/desktop/sessions?${params}`,
|
|
3264
3354
|
method: "GET"
|
|
@@ -4204,6 +4294,23 @@ function desktopEndpoint(request) {
|
|
|
4204
4294
|
path: `/v1/auth/providers/${request.provider}/credentials`,
|
|
4205
4295
|
method: "DELETE"
|
|
4206
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
|
+
};
|
|
4207
4314
|
case "settings.list":
|
|
4208
4315
|
return { path: "/v1/settings", method: "GET" };
|
|
4209
4316
|
case "settings.edit":
|
|
@@ -31705,6 +31812,24 @@ var IntlMessageFormat = class IntlMessageFormat2 {
|
|
|
31705
31812
|
};
|
|
31706
31813
|
}
|
|
31707
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
|
+
};
|
|
31708
31833
|
const enUiAgentsDialogs = {
|
|
31709
31834
|
"ui.agents.dialogs.create.title": "Create new agent",
|
|
31710
31835
|
"ui.agents.dialogs.create.cancel": "Cancel",
|
|
@@ -32224,6 +32349,8 @@ const enUiChat = {
|
|
|
32224
32349
|
"ui.chat.usage.blocked": "Spend unavailable",
|
|
32225
32350
|
"ui.chat.usage.eligibility_unknown": "Spend eligibility unknown",
|
|
32226
32351
|
"ui.chat.usage.unlimited": "Unlimited paid allowance",
|
|
32352
|
+
"ui.chat.skill_invocation.instructions_label": "Skill instructions sent with this message",
|
|
32353
|
+
"ui.chat.skill_invocation.trigger_label": "{token} skill instructions",
|
|
32227
32354
|
"ui.chat.highlights.file_resolution_failed": "Couldn't resolve this file in the session working directory. Use Copy file path to check its location against this session's workspace before trying again."
|
|
32228
32355
|
};
|
|
32229
32356
|
const enUiChatSidebarView = {
|
|
@@ -34136,6 +34263,155 @@ const enUiShellRail = {
|
|
|
34136
34263
|
"ui.shell.rail.console.tooltip": "{state, select, open {Close console{chord}} other {Open console{chord}}}",
|
|
34137
34264
|
"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}}"
|
|
34138
34265
|
};
|
|
34266
|
+
const esUiConsole = {
|
|
34267
|
+
"ui.console.capacity.summary": "{live, number, ::group-off} activas de {limit, number, ::group-off} en la app",
|
|
34268
|
+
"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}}",
|
|
34269
|
+
"ui.console.capacity.summary_compact_bare": "{live, number, ::group-off}/{limit, number, ::group-off}",
|
|
34270
|
+
"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}}",
|
|
34271
|
+
"ui.console.capacity.full": " · sin plazas libres",
|
|
34272
|
+
"ui.console.capacity.help": "El recuento abarca toda la app y todas las conversaciones. El historial conservado no ocupa una plaza de proceso.",
|
|
34273
|
+
"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.",
|
|
34274
|
+
"ui.console.cleanup.label": "Eliminar terminales de agentes finalizadas",
|
|
34275
|
+
"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.",
|
|
34276
|
+
"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.}}",
|
|
34277
|
+
"ui.console.cleanup.result_none": "Nada que eliminar — no hay terminales de agentes finalizadas en esta conversación.",
|
|
34278
|
+
"ui.console.dismiss_history": "Eliminar terminal y borrar la salida conservada",
|
|
34279
|
+
"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.",
|
|
34280
|
+
"ui.console.dismiss.title": "¿Eliminar esta terminal?",
|
|
34281
|
+
"ui.console.dismiss.confirm": "Eliminar terminal",
|
|
34282
|
+
"ui.console.close.body": "Esto termina el programa que se ejecuta aquí y elimina su pestaña.",
|
|
34283
|
+
"ui.console.close.busy": "Cerrando…",
|
|
34284
|
+
"ui.console.close.confirm": "Cerrar terminal",
|
|
34285
|
+
"ui.console.close.kept": "Su salida se conserva.",
|
|
34286
|
+
"ui.console.close.title": "¿Cerrar esta terminal?",
|
|
34287
|
+
"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.",
|
|
34288
|
+
"ui.console.create_failed.retry": "Volver a intentar",
|
|
34289
|
+
"ui.console.create_failed.title": "No se pudo iniciar la consola en esta sesión",
|
|
34290
|
+
"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.",
|
|
34291
|
+
"ui.console.empty.title": "No hay ninguna consola en esta sesión",
|
|
34292
|
+
"ui.console.ended.exit_code": "código de salida {code}",
|
|
34293
|
+
"ui.console.ended.exit_unknown": "código de salida no observado",
|
|
34294
|
+
"ui.console.ended.live": "Esta terminal ha finalizado",
|
|
34295
|
+
"ui.console.ended.restored": "Esta terminal ha finalizado y se ha restaurado su historial",
|
|
34296
|
+
"ui.console.loading.create": "Iniciando una consola",
|
|
34297
|
+
"ui.console.loading.read": "Leyendo la consola de esta sesión",
|
|
34298
|
+
"ui.console.new": "Nueva consola",
|
|
34299
|
+
"ui.console.pane.blip": "Finalizó después de tu última consulta",
|
|
34300
|
+
"ui.console.pane.close": "Cerrar consola",
|
|
34301
|
+
"ui.console.pane.close_refusal": "No se pudo cerrar la terminal.",
|
|
34302
|
+
"ui.console.pane.label": "Consola",
|
|
34303
|
+
"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.",
|
|
34304
|
+
"ui.console.pane.needs_conversation.title": "La consola necesita una conversación",
|
|
34305
|
+
"ui.console.pane.surfaces": "Terminales de la consola",
|
|
34306
|
+
"ui.console.secure": "La entrada segura está activada: lo que escribes aquí no se registra.",
|
|
34307
|
+
"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.",
|
|
34308
|
+
"ui.console.unavailable.disabled.title": "La consola está desactivada en esta ejecución",
|
|
34309
|
+
"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.",
|
|
34310
|
+
"ui.console.unavailable.title": "La consola no está disponible en esta app",
|
|
34311
|
+
"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.",
|
|
34312
|
+
"ui.console.tab.ended": "finalizada",
|
|
34313
|
+
"ui.console.tab.agent_opened": "Un agente abrió esta consola",
|
|
34314
|
+
"ui.console.tab.agent_typed": "Un agente ha escrito en esta consola",
|
|
34315
|
+
"ui.console.tab.close_label": "Cerrar {title}, pestaña {index, number, ::group-off} de {total, number, ::group-off}",
|
|
34316
|
+
"ui.console.tab.clear_label": "Eliminar {title}, pestaña {index, number, ::group-off} de {total, number, ::group-off}",
|
|
34317
|
+
"ui.console.tab.clear_label_retained": "Eliminar {title}, pestaña {index, number, ::group-off} de {total, number, ::group-off} — borra la salida conservada",
|
|
34318
|
+
"ui.console.secure_toggle.stop": "Desactivar la entrada segura",
|
|
34319
|
+
"ui.console.secure_toggle.start": "Entrada segura",
|
|
34320
|
+
"ui.console.secure_toggle.start_tooltip": "Entrada segura: dejar de registrar esta terminal",
|
|
34321
|
+
"ui.console.close.cancel": "Cancelar",
|
|
34322
|
+
"ui.console.terminal.prompt_label": "Entrada de la terminal",
|
|
34323
|
+
"ui.console.terminal.too_much_output": "Hay demasiada salida para leerla en voz alta. Recorre las filas manualmente para leerla."
|
|
34324
|
+
};
|
|
34325
|
+
const esUiOnboarding = {
|
|
34326
|
+
"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.",
|
|
34327
|
+
"ui.onboarding.default_model.block.loading_models": "Cargando la lista de modelos…",
|
|
34328
|
+
"ui.onboarding.default_model.block.pick_a_model": "Elige un modelo para continuar.",
|
|
34329
|
+
"ui.onboarding.default_model.change": "Cambiar",
|
|
34330
|
+
"ui.onboarding.default_model.connected_pick": "{brand} está conectado. Elige el modelo para los nuevos chats.",
|
|
34331
|
+
"ui.onboarding.default_model.empty_helper": "Aún no hay proveedores conectados. Vuelve al paso anterior para conectar uno.",
|
|
34332
|
+
"ui.onboarding.default_model.fallback_name": "Modelo predeterminado de {brand}",
|
|
34333
|
+
"ui.onboarding.default_model.intro": "Los nuevos chats usan este modelo. Cada agente puede elegir otro más adelante.",
|
|
34334
|
+
"ui.onboarding.default_model.loading": "Cargando tus modelos",
|
|
34335
|
+
"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.",
|
|
34336
|
+
"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.",
|
|
34337
|
+
"ui.onboarding.default_model.provider_fallback": "este proveedor",
|
|
34338
|
+
"ui.onboarding.default_model.tag.applied": "tu modelo predeterminado",
|
|
34339
|
+
"ui.onboarding.default_model.tag.suggested": "sugerido para tu cuenta",
|
|
34340
|
+
"ui.onboarding.dialog.setup": "Configuración",
|
|
34341
|
+
"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.",
|
|
34342
|
+
"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.",
|
|
34343
|
+
"ui.onboarding.extras.next_meet": "Siguiente: conocer a {name}",
|
|
34344
|
+
"ui.onboarding.modal.action.back": "Volver",
|
|
34345
|
+
"ui.onboarding.modal.action.continue": "Continuar",
|
|
34346
|
+
"ui.onboarding.modal.action.finish": "Finalizar",
|
|
34347
|
+
"ui.onboarding.modal.action.meet": "Conocer a {name}",
|
|
34348
|
+
"ui.onboarding.modal.action.skip": "Saltar",
|
|
34349
|
+
"ui.onboarding.modal.action.skip_for_now": "Saltar por ahora",
|
|
34350
|
+
"ui.onboarding.modal.action.skip_to_chat": "Ir al chat",
|
|
34351
|
+
"ui.onboarding.modal.error.aida_open_failed": "No se pudo abrir la conversación con {name}, así que estás en un nuevo chat.",
|
|
34352
|
+
"ui.onboarding.modal.title.connect_provider": "Conectar una cuenta de IA",
|
|
34353
|
+
"ui.onboarding.modal.title.default_model": "Tu modelo predeterminado",
|
|
34354
|
+
"ui.onboarding.modal.title.extras": "Búsqueda web (opcional)",
|
|
34355
|
+
"ui.onboarding.modal.title.extras_with_name": "Búsqueda web; después, conoce a {name}",
|
|
34356
|
+
"ui.onboarding.modal.title.fallback": "Configuración inicial",
|
|
34357
|
+
"ui.onboarding.search.each_key_saved": "Cada clave se guarda en tu dispositivo en cuanto sales de su campo.",
|
|
34358
|
+
"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.",
|
|
34359
|
+
"ui.onboarding.search.mode.free": "Gratis",
|
|
34360
|
+
"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.",
|
|
34361
|
+
"ui.onboarding.search.mode.keys": "Añadir claves de API",
|
|
34362
|
+
"ui.onboarding.search.mode.keys_detail": "Usa tus propias claves de los proveedores de búsqueda que utilizas.",
|
|
34363
|
+
"ui.onboarding.search.mode.label": "Configuración de búsqueda",
|
|
34364
|
+
"ui.onboarding.search.recommended": "Recomendado",
|
|
34365
|
+
"ui.onboarding.search.row.get_your": "Obtener {name}",
|
|
34366
|
+
"ui.onboarding.search.row.not_saved": "No guardada — {message}",
|
|
34367
|
+
"ui.onboarding.search.row.placeholder": "Pega tu clave de API",
|
|
34368
|
+
"ui.onboarding.search.row.save_failed": "No se pudo guardar la clave.",
|
|
34369
|
+
"ui.onboarding.search.row.saved": "Guardada",
|
|
34370
|
+
"ui.onboarding.search.row.saving": "Guardando {name}",
|
|
34371
|
+
"ui.onboarding.modal.step_of": "Paso {current, number, ::group-off} de {total, number, ::group-off}",
|
|
34372
|
+
"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}}"
|
|
34373
|
+
};
|
|
34374
|
+
const esUiSettings = {
|
|
34375
|
+
"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.",
|
|
34376
|
+
"ui.settings.language.dialog.loading": "Cargando el ajuste actual…",
|
|
34377
|
+
"ui.settings.language.dialog.retry": "Reintentar",
|
|
34378
|
+
"ui.settings.language.dialog.retrying": "Reintentando",
|
|
34379
|
+
"ui.settings.language.dialog.save": "Guardar",
|
|
34380
|
+
"ui.settings.language.dialog.saved": "Guardado",
|
|
34381
|
+
"ui.settings.language.dialog.title": "Idioma de la interfaz",
|
|
34382
|
+
"ui.settings.language.dialog.unavailable": "El servicio conectado no ofrece los ajustes que se editan en este diálogo.",
|
|
34383
|
+
"ui.settings.language.effective": "Idioma activo: {locale}",
|
|
34384
|
+
"ui.settings.language.external_notice": "El idioma de la interfaz cambió desde otro lugar — ahora es {language}.",
|
|
34385
|
+
"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.",
|
|
34386
|
+
"ui.settings.language.general.effective": "Idioma activo de la app: {locale}",
|
|
34387
|
+
"ui.settings.language.general.last_known": "Último idioma sincronizado de la app: {locale}",
|
|
34388
|
+
"ui.settings.language.general.no_resolution": "Aún no se ha establecido el idioma de la app.",
|
|
34389
|
+
"ui.settings.language.general.pending": "Guardando el idioma…",
|
|
34390
|
+
"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.",
|
|
34391
|
+
"ui.settings.language.general.saved": "Idioma guardado.",
|
|
34392
|
+
"ui.settings.language.general.system": "Usar el del sistema",
|
|
34393
|
+
"ui.settings.language.general.unavailable_choice": "No disponible",
|
|
34394
|
+
"ui.settings.language.general.write_error": "No se guardó el idioma. Tu ajuste anterior no ha cambiado. {message}",
|
|
34395
|
+
"ui.settings.language.palette_action": "Cambiar el idioma de la interfaz",
|
|
34396
|
+
"ui.settings.page.title": "Ajustes",
|
|
34397
|
+
"ui.settings.profile.description_anonymous": "Los datos de tu perfil que se muestran en la app. No se comparten con los agentes.",
|
|
34398
|
+
"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.",
|
|
34399
|
+
"ui.settings.profile.display_name.label": "Nombre visible",
|
|
34400
|
+
"ui.settings.profile.display_name.placeholder": "Escribe tu nombre…",
|
|
34401
|
+
"ui.settings.profile.email.label": "Correo electrónico",
|
|
34402
|
+
"ui.settings.profile.email.placeholder": "Escribe tu correo…",
|
|
34403
|
+
"ui.settings.profile.title": "Perfil de usuario",
|
|
34404
|
+
"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.",
|
|
34405
|
+
"ui.settings.section.interface_language.label": "Idioma de la interfaz",
|
|
34406
|
+
"ui.settings.tour.action": "Iniciar el recorrido",
|
|
34407
|
+
"ui.settings.tour.description": "¿Te saltaste el recorrido inicial de la app o quieres repasarlo? Puedes volver a iniciarlo aquí.",
|
|
34408
|
+
"ui.settings.tour.title": "Recorrido de la app",
|
|
34409
|
+
"ui.settings.profile.account_checking": "Comprobando tu cuenta de Radient…",
|
|
34410
|
+
"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.",
|
|
34411
|
+
"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.",
|
|
34412
|
+
"ui.settings.profile.retry": "Reintentar",
|
|
34413
|
+
"ui.settings.profile.retrying": "Reintentando"
|
|
34414
|
+
};
|
|
34139
34415
|
const frUiConsole = {
|
|
34140
34416
|
"ui.console.close.body": "Le programme en cours sera arrêté et son onglet supprimé.",
|
|
34141
34417
|
"ui.console.close.busy": "Fermeture…",
|
|
@@ -34285,7 +34561,306 @@ const frUiSettings = {
|
|
|
34285
34561
|
"ui.settings.profile.retry": "Réessayer",
|
|
34286
34562
|
"ui.settings.profile.retrying": "Nouvel essai"
|
|
34287
34563
|
};
|
|
34564
|
+
const ruUiConsole = {
|
|
34565
|
+
"ui.console.capacity.summary": "Активных терминалов в приложении: {live, number, ::group-off} из {limit, number, ::group-off}",
|
|
34566
|
+
"ui.console.capacity.summary_compact": "{live, number, ::group-off}/{limit, number, ::group-off} · сохранено: {archived, number, ::group-off}",
|
|
34567
|
+
"ui.console.capacity.summary_compact_bare": "{live, number, ::group-off}/{limit, number, ::group-off}",
|
|
34568
|
+
"ui.console.capacity.archived": " · сохранено: {archived, number, ::group-off}",
|
|
34569
|
+
"ui.console.capacity.full": " · лимит достигнут",
|
|
34570
|
+
"ui.console.capacity.help": "Общее число терминалов приложения во всех разговорах. Сохранённая история не занимает место для процесса.",
|
|
34571
|
+
"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}. Память дочерних процессов не учитывается.",
|
|
34572
|
+
"ui.console.cleanup.label": "Очистить завершённые терминалы агентов",
|
|
34573
|
+
"ui.console.cleanup.help": "Очищает завершённые терминалы агентов в этом разговоре. Если агент попросил сохранить завершённый терминал, тот остаётся на диске; остальные закрываются без сохранения вывода. Терминалы, открытые вами, и все используемые терминалы остаются без изменений.",
|
|
34574
|
+
"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} терминала ещё используются и оставлены открытыми.}}",
|
|
34575
|
+
"ui.console.cleanup.result_none": "Нечего очищать — в этом разговоре нет завершённых терминалов агентов.",
|
|
34576
|
+
"ui.console.dismiss_history": "Очистить терминал и удалить сохранённый вывод",
|
|
34577
|
+
"ui.console.dismiss.body": "При очистке этого терминала сохранённый вывод удаляется с диска, поэтому после перезапуска его нельзя будет восстановить.",
|
|
34578
|
+
"ui.console.dismiss.title": "Очистить этот терминал?",
|
|
34579
|
+
"ui.console.dismiss.confirm": "Очистить терминал",
|
|
34580
|
+
"ui.console.close.body": "Это завершит работающую здесь программу и удалит её вкладку.",
|
|
34581
|
+
"ui.console.close.busy": "Закрытие…",
|
|
34582
|
+
"ui.console.close.confirm": "Закрыть терминал",
|
|
34583
|
+
"ui.console.close.kept": "Вывод программы сохранится.",
|
|
34584
|
+
"ui.console.close.title": "Закрыть этот терминал?",
|
|
34585
|
+
"ui.console.create_failed.detail": "Сервис консоли работает, но отказался запускать программу для этого разговора — не удалась одна попытка, а сама консоль не отключена. Сначала попробуйте ещё раз. Если ошибка повторится, ниже указана причина, которую сообщил сам сервис.",
|
|
34586
|
+
"ui.console.create_failed.retry": "Попробовать снова",
|
|
34587
|
+
"ui.console.create_failed.title": "Не удалось запустить консоль в этой сессии",
|
|
34588
|
+
"ui.console.empty.detail": "Консоль запускает программу в папке этого разговора и сохраняет её вывод, даже когда эта панель закрыта.",
|
|
34589
|
+
"ui.console.empty.title": "В этой сессии нет консоли",
|
|
34590
|
+
"ui.console.ended.exit_code": "код завершения {code}",
|
|
34591
|
+
"ui.console.ended.exit_unknown": "код завершения не получен",
|
|
34592
|
+
"ui.console.ended.live": "Этот терминал завершил работу",
|
|
34593
|
+
"ui.console.ended.restored": "Этот терминал завершил работу; его история восстановлена",
|
|
34594
|
+
"ui.console.loading.create": "Запуск консоли",
|
|
34595
|
+
"ui.console.loading.read": "Чтение консоли этой сессии",
|
|
34596
|
+
"ui.console.new": "Новая консоль",
|
|
34597
|
+
"ui.console.pane.blip": "Работа завершилась после последнего просмотра",
|
|
34598
|
+
"ui.console.pane.close": "Закрыть консоль",
|
|
34599
|
+
"ui.console.pane.close_refusal": "Не удалось закрыть терминал.",
|
|
34600
|
+
"ui.console.pane.label": "Консоль",
|
|
34601
|
+
"ui.console.pane.needs_conversation.detail": "Консоль запускается в рабочей папке разговора. Пока разговор не выбран, запустить её негде.",
|
|
34602
|
+
"ui.console.pane.needs_conversation.title": "Для консоли нужен разговор",
|
|
34603
|
+
"ui.console.pane.surfaces": "Терминалы консоли",
|
|
34604
|
+
"ui.console.secure": "Защищённый ввод включён: введённый здесь текст не записывается.",
|
|
34605
|
+
"ui.console.unavailable.disabled.detail": "В окружении приложения LOCAL_OPERATOR_UI_CONSOLE_HOST задано значение 0, поэтому терминалы не запускаются и создать новый терминал нельзя. Удалите эту настройку, чтобы снова включить консоль.",
|
|
34606
|
+
"ui.console.unavailable.disabled.title": "Консоль отключена в этом запуске",
|
|
34607
|
+
"ui.console.unavailable.pty.detail": "Поддержка терминала не загрузилась при этом запуске. Обновление Local Operator восстановит её; причина указана в журнале приложения.",
|
|
34608
|
+
"ui.console.unavailable.title": "Консоль недоступна в этом приложении",
|
|
34609
|
+
"ui.console.unavailable.unknown.detail": "Это окно не смогло подключиться к консоли и не сообщило причину. Она указана в журнале приложения.",
|
|
34610
|
+
"ui.console.tab.ended": "завершён",
|
|
34611
|
+
"ui.console.tab.agent_opened": "Агент открыл эту консоль",
|
|
34612
|
+
"ui.console.tab.agent_typed": "Агент вводил текст в этой консоли",
|
|
34613
|
+
"ui.console.tab.close_label": "Закрыть {title}, вкладка {index, number, ::group-off} из {total, number, ::group-off}",
|
|
34614
|
+
"ui.console.tab.clear_label": "Очистить {title}, вкладка {index, number, ::group-off} из {total, number, ::group-off}",
|
|
34615
|
+
"ui.console.tab.clear_label_retained": "Очистить {title}, вкладка {index, number, ::group-off} из {total, number, ::group-off} — сохранённый вывод будет удалён",
|
|
34616
|
+
"ui.console.secure_toggle.stop": "Выключить защищённый ввод",
|
|
34617
|
+
"ui.console.secure_toggle.start": "Защищённый ввод",
|
|
34618
|
+
"ui.console.secure_toggle.start_tooltip": "Защищённый ввод: отключить запись этого терминала",
|
|
34619
|
+
"ui.console.close.cancel": "Отмена",
|
|
34620
|
+
"ui.console.terminal.prompt_label": "Ввод в терминале",
|
|
34621
|
+
"ui.console.terminal.too_much_output": "Слишком много вывода для озвучивания. Для чтения переходите по строкам вручную."
|
|
34622
|
+
};
|
|
34623
|
+
const ruUiOnboarding = {
|
|
34624
|
+
"ui.onboarding.connect.intro": "Для работы Local Operator нужна учётная запись ИИ-сервиса. Проще всего с Radient: достаточно войти в браузере, ничего вставлять не нужно. Уже оплачиваете ChatGPT или Claude? Войдите через этот сервис. Откройте список провайдеров ниже, чтобы увидеть остальные варианты.",
|
|
34625
|
+
"ui.onboarding.default_model.block.loading_models": "Загрузка списка моделей…",
|
|
34626
|
+
"ui.onboarding.default_model.block.pick_a_model": "Выберите модель, чтобы продолжить.",
|
|
34627
|
+
"ui.onboarding.default_model.change": "Изменить",
|
|
34628
|
+
"ui.onboarding.default_model.connected_pick": "Подключение к {brand} настроено. Выберите модель для новых чатов.",
|
|
34629
|
+
"ui.onboarding.default_model.empty_helper": "Провайдеры ещё не подключены. Вернитесь на шаг назад, чтобы подключить один из них.",
|
|
34630
|
+
"ui.onboarding.default_model.fallback_name": "Модель по умолчанию — {brand}",
|
|
34631
|
+
"ui.onboarding.default_model.intro": "Эта модель используется в новых чатах. Позже каждый агент может выбрать другую.",
|
|
34632
|
+
"ui.onboarding.default_model.loading": "Загрузка ваших моделей",
|
|
34633
|
+
"ui.onboarding.default_model.none_connected": "Провайдеры ещё не подключены. Вернитесь и подключите один из них или пропустите настройку и подключите его позже из чата.",
|
|
34634
|
+
"ui.onboarding.default_model.nothing_saved": "Ничего не будет сохранено: Local Operator пока не может получить список моделей ({brand}), поэтому настройка завершится без модели по умолчанию. Выберите её в настройках до первого сообщения.",
|
|
34635
|
+
"ui.onboarding.default_model.provider_fallback": "этот провайдер",
|
|
34636
|
+
"ui.onboarding.default_model.tag.applied": "по умолчанию",
|
|
34637
|
+
"ui.onboarding.default_model.tag.suggested": "рекомендуется для вашей учётной записи",
|
|
34638
|
+
"ui.onboarding.dialog.setup": "Настройка",
|
|
34639
|
+
"ui.onboarding.extras.greeting_done": "{name} — ваш координатор. Продолжить общение можно в разговоре с ней: он доступен на боковой панели одним нажатием клавиши. Можно также сразу перейти к новому чату.",
|
|
34640
|
+
"ui.onboarding.extras.greeting_owed": "{name} — ваш координатор. Она первой поздоровается, спросит, как к вам обращаться и с чем помочь, и познакомит вас с приложением. Можно также сразу перейти к новому чату.",
|
|
34641
|
+
"ui.onboarding.extras.next_meet": "Далее — знакомство: {name}",
|
|
34642
|
+
"ui.onboarding.modal.action.back": "Назад",
|
|
34643
|
+
"ui.onboarding.modal.action.continue": "Продолжить",
|
|
34644
|
+
"ui.onboarding.modal.action.finish": "Завершить",
|
|
34645
|
+
"ui.onboarding.modal.action.meet": "Познакомиться с агентом «{name}»",
|
|
34646
|
+
"ui.onboarding.modal.action.skip": "Пропустить",
|
|
34647
|
+
"ui.onboarding.modal.action.skip_for_now": "Пока пропустить",
|
|
34648
|
+
"ui.onboarding.modal.action.skip_to_chat": "Перейти к чату",
|
|
34649
|
+
"ui.onboarding.modal.error.aida_open_failed": "Не удалось открыть разговор с агентом «{name}», поэтому вместо него открыт новый чат.",
|
|
34650
|
+
"ui.onboarding.modal.title.connect_provider": "Подключить учётную запись ИИ-сервиса",
|
|
34651
|
+
"ui.onboarding.modal.title.default_model": "Ваша модель по умолчанию",
|
|
34652
|
+
"ui.onboarding.modal.title.extras": "Поиск в интернете (необязательно)",
|
|
34653
|
+
"ui.onboarding.modal.title.extras_with_name": "Поиск в интернете, затем знакомство: {name}",
|
|
34654
|
+
"ui.onboarding.modal.title.fallback": "Первоначальная настройка",
|
|
34655
|
+
"ui.onboarding.search.each_key_saved": "Каждый ключ сохраняется на устройстве сразу, как только вы покидаете его поле ввода.",
|
|
34656
|
+
"ui.onboarding.search.intro": "Во время работы агенты могут искать актуальные сведения — цены на сегодня, новости за неделю — вместо того, чтобы полагаться лишь на знания модели.",
|
|
34657
|
+
"ui.onboarding.search.mode.free": "Бесплатно",
|
|
34658
|
+
"ui.onboarding.search.mode.free_detail": "Поиск поочерёдно использует бесплатные сервисы: DuckDuckGo, бесплатный тариф Tavily, Exa и Parallel. Ключ не нужен; сервисами пользуются и другие, поэтому при высокой нагрузке поиск может идти медленнее.",
|
|
34659
|
+
"ui.onboarding.search.mode.keys": "Добавить ключи API",
|
|
34660
|
+
"ui.onboarding.search.mode.keys_detail": "Добавьте свои ключи для поисковых сервисов, которыми пользуетесь.",
|
|
34661
|
+
"ui.onboarding.search.mode.label": "Настройка поиска",
|
|
34662
|
+
"ui.onboarding.search.recommended": "Рекомендуется",
|
|
34663
|
+
"ui.onboarding.search.row.get_your": "Получить: {name}",
|
|
34664
|
+
"ui.onboarding.search.row.not_saved": "Не сохранено — {message}",
|
|
34665
|
+
"ui.onboarding.search.row.placeholder": "Вставьте ключ API",
|
|
34666
|
+
"ui.onboarding.search.row.save_failed": "Не удалось сохранить ключ.",
|
|
34667
|
+
"ui.onboarding.search.row.saved": "Сохранено",
|
|
34668
|
+
"ui.onboarding.search.row.saving": "Сохранение: {name}",
|
|
34669
|
+
"ui.onboarding.modal.step_of": "Шаг {current, number, ::group-off} из {total, number, ::group-off}",
|
|
34670
|
+
"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} шага}}"
|
|
34671
|
+
};
|
|
34672
|
+
const ruUiSettings = {
|
|
34673
|
+
"ui.settings.language.dialog.description": "Применяется в приложении и терминале — это та же настройка, что и на странице настроек.",
|
|
34674
|
+
"ui.settings.language.dialog.loading": "Загрузка текущей настройки…",
|
|
34675
|
+
"ui.settings.language.dialog.retry": "Повторить",
|
|
34676
|
+
"ui.settings.language.dialog.retrying": "Повторная попытка",
|
|
34677
|
+
"ui.settings.language.dialog.save": "Сохранить",
|
|
34678
|
+
"ui.settings.language.dialog.saved": "Сохранено",
|
|
34679
|
+
"ui.settings.language.dialog.title": "Язык интерфейса",
|
|
34680
|
+
"ui.settings.language.dialog.unavailable": "Подключённый сервис не предоставляет настройки, которые меняются в этом окне.",
|
|
34681
|
+
"ui.settings.language.effective": "Текущий язык: {locale}",
|
|
34682
|
+
"ui.settings.language.external_notice": "Язык интерфейса изменён в другом месте — теперь {language}.",
|
|
34683
|
+
"ui.settings.language.general.description": "Выберите общий язык приложения и терминала. Изменения сохраняются сразу; текст прежних разговоров не меняется.",
|
|
34684
|
+
"ui.settings.language.general.effective": "Текущий язык приложения: {locale}",
|
|
34685
|
+
"ui.settings.language.general.last_known": "Последний синхронизированный язык приложения: {locale}",
|
|
34686
|
+
"ui.settings.language.general.no_resolution": "Язык приложения ещё не задан.",
|
|
34687
|
+
"ui.settings.language.general.pending": "Сохранение языка…",
|
|
34688
|
+
"ui.settings.language.general.readback_error": "Сохранение подтверждено, но проверить текущую настройку не удалось. Переподключитесь или повторите проверку, прежде чем менять её снова.",
|
|
34689
|
+
"ui.settings.language.general.saved": "Язык сохранён.",
|
|
34690
|
+
"ui.settings.language.general.system": "Как в системе",
|
|
34691
|
+
"ui.settings.language.general.unavailable_choice": "Недоступно",
|
|
34692
|
+
"ui.settings.language.general.write_error": "Язык не сохранён. Прежняя настройка не изменилась. {message}",
|
|
34693
|
+
"ui.settings.language.palette_action": "Изменить язык интерфейса",
|
|
34694
|
+
"ui.settings.page.title": "Настройки",
|
|
34695
|
+
"ui.settings.profile.description_anonymous": "Данные вашего профиля, отображаемые в приложении. Эти сведения не передаются агентам.",
|
|
34696
|
+
"ui.settings.profile.description_authenticated": "Данные вашего профиля, отображаемые в приложении. Эти сведения не передаются агентам. Они получены из вашей учётной записи Radient.",
|
|
34697
|
+
"ui.settings.profile.display_name.label": "Отображаемое имя",
|
|
34698
|
+
"ui.settings.profile.display_name.placeholder": "Введите имя…",
|
|
34699
|
+
"ui.settings.profile.email.label": "Адрес электронной почты",
|
|
34700
|
+
"ui.settings.profile.email.placeholder": "Введите адрес почты…",
|
|
34701
|
+
"ui.settings.profile.title": "Профиль пользователя",
|
|
34702
|
+
"ui.settings.section.interface_language.help": "Язык интерфейса — общая настройка приложения и терминала. auto использует язык операционной системы; если он недоступен, используется английский.",
|
|
34703
|
+
"ui.settings.section.interface_language.label": "Язык интерфейса",
|
|
34704
|
+
"ui.settings.tour.action": "Начать обзор",
|
|
34705
|
+
"ui.settings.tour.description": "Пропустили знакомство с приложением или хотите освежить память? Здесь можно запустить обзор заново.",
|
|
34706
|
+
"ui.settings.tour.title": "Обзор приложения",
|
|
34707
|
+
"ui.settings.profile.account_checking": "Проверка учётной записи Radient…",
|
|
34708
|
+
"ui.settings.profile.account_read_failed_retry": "Не удалось прочитать данные учётной записи Radient, поэтому имя и адрес почты ниже — лишь примеры, а не данные вашей учётной записи. Повторите попытку.",
|
|
34709
|
+
"ui.settings.profile.account_read_failed_refused": "Не удалось прочитать данные учётной записи Radient, поэтому имя и адрес почты ниже — лишь примеры, а не данные вашей учётной записи. Повторите попытку или войдите в Radient заново.",
|
|
34710
|
+
"ui.settings.profile.retry": "Повторить",
|
|
34711
|
+
"ui.settings.profile.retrying": "Повторная попытка"
|
|
34712
|
+
};
|
|
34713
|
+
const viUiConsole = {
|
|
34714
|
+
"ui.console.capacity.summary": "{live, number, ::group-off} đang chạy trên tổng số {limit, number, ::group-off} trong ứng dụng",
|
|
34715
|
+
"ui.console.capacity.summary_compact": "{live, number, ::group-off}/{limit, number, ::group-off} · giữ lại {archived, number, ::group-off}",
|
|
34716
|
+
"ui.console.capacity.summary_compact_bare": "{live, number, ::group-off}/{limit, number, ::group-off}",
|
|
34717
|
+
"ui.console.capacity.archived": " · giữ lại {archived, number, ::group-off}",
|
|
34718
|
+
"ui.console.capacity.full": " · đã đầy",
|
|
34719
|
+
"ui.console.capacity.help": "Số liệu của toàn ứng dụng, tính trên mọi cuộc trò chuyện. Lịch sử giữ lại không chiếm chỗ dành cho tiến trình.",
|
|
34720
|
+
"ui.console.capacity.resources": "Dung lượng lưu trữ do hệ thống quản lý (ước tính): {memory, number, ::group-off} MiB. Nhật ký: {logs, number, ::group-off} MiB. Đầu ra đang chờ: {pending, number, ::group-off} MiB. Ô ký tự dòng lệnh: {cells, number, ::group-off}. Cửa sổ dòng lệnh được bảo vệ: {protected, number, ::group-off}. Không tính bộ nhớ của tiến trình con.",
|
|
34721
|
+
"ui.console.cleanup.label": "Dọn cửa sổ dòng lệnh đã kết thúc của tác nhân",
|
|
34722
|
+
"ui.console.cleanup.help": "Dọn các cửa sổ dòng lệnh đã kết thúc của tác nhân trong cuộc trò chuyện này. Những cửa sổ đã kết thúc mà tác nhân yêu cầu giữ lại vẫn được lưu trên đĩa; các cửa sổ còn lại được đóng và không giữ đầu ra. Các cửa sổ bạn mở và mọi cửa sổ đang được sử dụng đều được giữ nguyên.",
|
|
34723
|
+
"ui.console.cleanup.result": "Đã dọn {released, plural, other {{released, number, ::group-off} cửa sổ dòng lệnh đã kết thúc của tác nhân}}. {protected, plural, =0 {} other {{protected, number, ::group-off} cửa sổ vẫn đang được sử dụng nên được giữ mở.}}",
|
|
34724
|
+
"ui.console.cleanup.result_none": "Không có gì để dọn — cuộc trò chuyện này không có cửa sổ dòng lệnh đã kết thúc của tác nhân.",
|
|
34725
|
+
"ui.console.dismiss_history": "Dọn cửa sổ dòng lệnh và xóa đầu ra được giữ lại",
|
|
34726
|
+
"ui.console.dismiss.body": "Dọn cửa sổ dòng lệnh này sẽ xóa đầu ra được giữ lại trên đĩa, nên không thể khôi phục khi mở lại ứng dụng.",
|
|
34727
|
+
"ui.console.dismiss.title": "Dọn cửa sổ dòng lệnh này?",
|
|
34728
|
+
"ui.console.dismiss.confirm": "Dọn cửa sổ dòng lệnh",
|
|
34729
|
+
"ui.console.close.body": "Thao tác này kết thúc chương trình đang chạy tại đây và xóa thẻ của chương trình.",
|
|
34730
|
+
"ui.console.close.busy": "Đang đóng…",
|
|
34731
|
+
"ui.console.close.confirm": "Đóng cửa sổ dòng lệnh",
|
|
34732
|
+
"ui.console.close.kept": "Nội dung đầu ra được giữ lại.",
|
|
34733
|
+
"ui.console.close.title": "Đóng cửa sổ dòng lệnh này?",
|
|
34734
|
+
"ui.console.create_failed.detail": "Host của bảng lệnh đang chạy nhưng đã từ chối khởi động chương trình cho cuộc trò chuyện này — chỉ lần thử này thất bại, không phải bảng lệnh bị tắt. Trước tiên hãy thử lại; nếu vẫn thất bại, dòng dưới là lý do do host cung cấp.",
|
|
34735
|
+
"ui.console.create_failed.retry": "Thử lại",
|
|
34736
|
+
"ui.console.create_failed.title": "Không thể khởi động bảng lệnh trong phiên này",
|
|
34737
|
+
"ui.console.empty.detail": "Bảng lệnh chạy chương trình trong thư mục của cuộc trò chuyện này và giữ lại đầu ra, dù khung này có mở hay không.",
|
|
34738
|
+
"ui.console.empty.title": "Phiên này chưa có bảng lệnh",
|
|
34739
|
+
"ui.console.ended.exit_code": "mã thoát {code}",
|
|
34740
|
+
"ui.console.ended.exit_unknown": "chưa ghi nhận mã thoát",
|
|
34741
|
+
"ui.console.ended.live": "Cửa sổ dòng lệnh này đã kết thúc",
|
|
34742
|
+
"ui.console.ended.restored": "Cửa sổ dòng lệnh này đã kết thúc và lịch sử đã được khôi phục",
|
|
34743
|
+
"ui.console.loading.create": "Đang khởi động bảng lệnh",
|
|
34744
|
+
"ui.console.loading.read": "Đang đọc bảng lệnh của phiên này",
|
|
34745
|
+
"ui.console.new": "Bảng lệnh mới",
|
|
34746
|
+
"ui.console.pane.blip": "Đã kết thúc kể từ lần xem trước",
|
|
34747
|
+
"ui.console.pane.close": "Đóng bảng lệnh",
|
|
34748
|
+
"ui.console.pane.close_refusal": "Không thể đóng cửa sổ dòng lệnh.",
|
|
34749
|
+
"ui.console.pane.label": "Bảng lệnh",
|
|
34750
|
+
"ui.console.pane.needs_conversation.detail": "Bảng lệnh chạy trong thư mục làm việc của một cuộc trò chuyện, nên hiện chưa có nơi để tạo bảng lệnh.",
|
|
34751
|
+
"ui.console.pane.needs_conversation.title": "Bảng lệnh cần có cuộc trò chuyện",
|
|
34752
|
+
"ui.console.pane.surfaces": "Các bảng lệnh",
|
|
34753
|
+
"ui.console.secure": "Chế độ nhập bảo mật đang bật: nội dung gõ ở đây không được ghi lại.",
|
|
34754
|
+
"ui.console.unavailable.disabled.detail": "LOCAL_OPERATOR_UI_CONSOLE_HOST được đặt là 0 trong môi trường của ứng dụng này, nên không khởi động cửa sổ dòng lệnh hay tạo bảng lệnh nào. Bỏ cài đặt đó để bật lại bảng lệnh.",
|
|
34755
|
+
"ui.console.unavailable.disabled.title": "Bảng lệnh bị tắt trong lần chạy này",
|
|
34756
|
+
"ui.console.unavailable.pty.detail": "Hỗ trợ dòng lệnh chưa được tải trong lần chạy này. Cập nhật Local Operator để khôi phục; nhật ký ứng dụng có ghi lý do.",
|
|
34757
|
+
"ui.console.unavailable.title": "Bảng lệnh không khả dụng trong ứng dụng này",
|
|
34758
|
+
"ui.console.unavailable.unknown.detail": "Cửa sổ này không truy cập được bảng lệnh và không cho biết lý do. Lý do có trong nhật ký ứng dụng.",
|
|
34759
|
+
"ui.console.tab.ended": "đã kết thúc",
|
|
34760
|
+
"ui.console.tab.agent_opened": "Một tác nhân đã mở bảng lệnh này",
|
|
34761
|
+
"ui.console.tab.agent_typed": "Một tác nhân đã nhập vào bảng lệnh này",
|
|
34762
|
+
"ui.console.tab.close_label": "Đóng {title}, thẻ {index, number, ::group-off} trên {total, number, ::group-off}",
|
|
34763
|
+
"ui.console.tab.clear_label": "Dọn {title}, thẻ {index, number, ::group-off} trên {total, number, ::group-off}",
|
|
34764
|
+
"ui.console.tab.clear_label_retained": "Dọn {title}, thẻ {index, number, ::group-off} trên {total, number, ::group-off} — xóa đầu ra được giữ lại",
|
|
34765
|
+
"ui.console.secure_toggle.stop": "Tắt chế độ nhập bảo mật",
|
|
34766
|
+
"ui.console.secure_toggle.start": "Nhập bảo mật",
|
|
34767
|
+
"ui.console.secure_toggle.start_tooltip": "Nhập bảo mật: ngừng ghi lại cửa sổ dòng lệnh này",
|
|
34768
|
+
"ui.console.close.cancel": "Hủy",
|
|
34769
|
+
"ui.console.terminal.prompt_label": "Ô nhập dòng lệnh",
|
|
34770
|
+
"ui.console.terminal.too_much_output": "Nội dung đầu ra quá nhiều để đọc thành tiếng. Hãy tự di chuyển đến từng dòng để đọc."
|
|
34771
|
+
};
|
|
34772
|
+
const viUiOnboarding = {
|
|
34773
|
+
"ui.onboarding.connect.intro": "Local Operator cần tài khoản AI để hoạt động. Radient đơn giản nhất: đăng nhập một lần qua trình duyệt, không cần dán gì. Bạn đã trả phí cho ChatGPT hoặc Claude? Hãy đăng nhập bằng tài khoản đó. Mở danh sách nhà cung cấp bên dưới để xem các lựa chọn khác.",
|
|
34774
|
+
"ui.onboarding.default_model.block.loading_models": "Đang tải danh sách mô hình…",
|
|
34775
|
+
"ui.onboarding.default_model.block.pick_a_model": "Chọn mô hình để tiếp tục.",
|
|
34776
|
+
"ui.onboarding.default_model.change": "Đổi",
|
|
34777
|
+
"ui.onboarding.default_model.connected_pick": "Đã kết nối {brand}. Chọn mô hình cho các cuộc trò chuyện mới.",
|
|
34778
|
+
"ui.onboarding.default_model.empty_helper": "Chưa kết nối nhà cung cấp nào. Quay lại bước trước để kết nối.",
|
|
34779
|
+
"ui.onboarding.default_model.fallback_name": "Mô hình mặc định của {brand}",
|
|
34780
|
+
"ui.onboarding.default_model.intro": "Cuộc trò chuyện mới dùng mô hình này. Mỗi tác nhân có thể chọn mô hình khác sau.",
|
|
34781
|
+
"ui.onboarding.default_model.loading": "Đang tải mô hình của bạn",
|
|
34782
|
+
"ui.onboarding.default_model.none_connected": "Chưa kết nối nhà cung cấp nào. Quay lại để kết nối, hoặc bỏ qua thiết lập rồi kết nối sau trong cuộc trò chuyện.",
|
|
34783
|
+
"ui.onboarding.default_model.nothing_saved": "Sẽ không lưu gì: Local Operator của bạn chưa liệt kê được các mô hình của {brand}, nên thiết lập sẽ kết thúc mà không có mô hình mặc định. Chọn mô hình trong Cài đặt trước khi gửi tin nhắn đầu tiên.",
|
|
34784
|
+
"ui.onboarding.default_model.provider_fallback": "nhà cung cấp này",
|
|
34785
|
+
"ui.onboarding.default_model.tag.applied": "mặc định của bạn",
|
|
34786
|
+
"ui.onboarding.default_model.tag.suggested": "đề xuất cho tài khoản của bạn",
|
|
34787
|
+
"ui.onboarding.dialog.setup": "Thiết lập",
|
|
34788
|
+
"ui.onboarding.extras.greeting_done": "{name} là chánh văn phòng của bạn. Bạn có thể tiếp tục trao đổi với cô ấy trong cuộc trò chuyện riêng, mở từ thanh bên chỉ bằng một phím bấm. Bạn cũng có thể bỏ qua và vào thẳng cuộc trò chuyện mới.",
|
|
34789
|
+
"ui.onboarding.extras.greeting_owed": "{name} là chánh văn phòng của bạn. Cô ấy sẽ chào trước, hỏi nên gọi bạn là gì và bạn cần giúp việc gì, rồi hướng dẫn bạn làm quen. Bạn cũng có thể bỏ qua và vào thẳng cuộc trò chuyện mới.",
|
|
34790
|
+
"ui.onboarding.extras.next_meet": "Tiếp theo: gặp {name}",
|
|
34791
|
+
"ui.onboarding.modal.action.back": "Quay lại",
|
|
34792
|
+
"ui.onboarding.modal.action.continue": "Tiếp tục",
|
|
34793
|
+
"ui.onboarding.modal.action.finish": "Hoàn tất",
|
|
34794
|
+
"ui.onboarding.modal.action.meet": "Gặp {name}",
|
|
34795
|
+
"ui.onboarding.modal.action.skip": "Bỏ qua",
|
|
34796
|
+
"ui.onboarding.modal.action.skip_for_now": "Tạm bỏ qua",
|
|
34797
|
+
"ui.onboarding.modal.action.skip_to_chat": "Vào thẳng trò chuyện",
|
|
34798
|
+
"ui.onboarding.modal.error.aida_open_failed": "Không mở được cuộc trò chuyện với {name}, nên bạn được chuyển sang cuộc trò chuyện mới.",
|
|
34799
|
+
"ui.onboarding.modal.title.connect_provider": "Kết nối tài khoản AI",
|
|
34800
|
+
"ui.onboarding.modal.title.default_model": "Mô hình mặc định của bạn",
|
|
34801
|
+
"ui.onboarding.modal.title.extras": "Tìm kiếm web (tùy chọn)",
|
|
34802
|
+
"ui.onboarding.modal.title.extras_with_name": "Tìm kiếm web, rồi gặp {name}",
|
|
34803
|
+
"ui.onboarding.modal.title.fallback": "Thiết lập lần đầu",
|
|
34804
|
+
"ui.onboarding.search.each_key_saved": "Mỗi khóa được lưu trên thiết bị ngay khi bạn rời ô nhập khóa đó.",
|
|
34805
|
+
"ui.onboarding.search.intro": "Tác nhân có thể tra cứu khi làm việc — giá hôm nay, tin tức tuần này — thay vì chỉ dựa vào những gì mô hình đã biết.",
|
|
34806
|
+
"ui.onboarding.search.mode.free": "Miễn phí",
|
|
34807
|
+
"ui.onboarding.search.mode.free_detail": "Luân phiên dùng các nhà cung cấp miễn phí — DuckDuckGo, gói miễn phí của Tavily, Exa và Parallel. Không cần khóa; tài nguyên dùng chung nên tìm kiếm có thể chậm hơn khi đông người dùng.",
|
|
34808
|
+
"ui.onboarding.search.mode.keys": "Thêm khóa API",
|
|
34809
|
+
"ui.onboarding.search.mode.keys_detail": "Dùng khóa riêng cho các nhà cung cấp tìm kiếm bạn sử dụng.",
|
|
34810
|
+
"ui.onboarding.search.mode.label": "Thiết lập tìm kiếm",
|
|
34811
|
+
"ui.onboarding.search.recommended": "Đề xuất",
|
|
34812
|
+
"ui.onboarding.search.row.get_your": "Lấy {name}",
|
|
34813
|
+
"ui.onboarding.search.row.not_saved": "Chưa lưu — {message}",
|
|
34814
|
+
"ui.onboarding.search.row.placeholder": "Dán khóa API",
|
|
34815
|
+
"ui.onboarding.search.row.save_failed": "Không lưu được khóa.",
|
|
34816
|
+
"ui.onboarding.search.row.saved": "Đã lưu",
|
|
34817
|
+
"ui.onboarding.search.row.saving": "Đang lưu {name}",
|
|
34818
|
+
"ui.onboarding.modal.step_of": "Bước {current, number, ::group-off} trên {total, number, ::group-off}",
|
|
34819
|
+
"ui.onboarding.modal.steps_total": "{total, plural, other {{total, number, ::group-off} bước}}"
|
|
34820
|
+
};
|
|
34821
|
+
const viUiSettings = {
|
|
34822
|
+
"ui.settings.language.dialog.description": "Áp dụng cho cả ứng dụng và cửa sổ dòng lệnh — cùng cài đặt trên trang Cài đặt.",
|
|
34823
|
+
"ui.settings.language.dialog.loading": "Đang tải cài đặt hiện tại…",
|
|
34824
|
+
"ui.settings.language.dialog.retry": "Thử lại",
|
|
34825
|
+
"ui.settings.language.dialog.retrying": "Đang thử lại",
|
|
34826
|
+
"ui.settings.language.dialog.save": "Lưu",
|
|
34827
|
+
"ui.settings.language.dialog.saved": "Đã lưu",
|
|
34828
|
+
"ui.settings.language.dialog.title": "Ngôn ngữ giao diện",
|
|
34829
|
+
"ui.settings.language.dialog.unavailable": "Dịch vụ đang kết nối không cung cấp các cài đặt mà hộp thoại này chỉnh sửa.",
|
|
34830
|
+
"ui.settings.language.effective": "Đang dùng: {locale}",
|
|
34831
|
+
"ui.settings.language.external_notice": "Ngôn ngữ giao diện đã đổi ở nơi khác — hiện là {language}.",
|
|
34832
|
+
"ui.settings.language.general.description": "Chọn ngôn ngữ chung cho ứng dụng và cửa sổ dòng lệnh. Thay đổi được lưu ngay; các cuộc trò chuyện hiện có không bị viết lại.",
|
|
34833
|
+
"ui.settings.language.general.effective": "Ngôn ngữ ứng dụng đang dùng: {locale}",
|
|
34834
|
+
"ui.settings.language.general.last_known": "Ngôn ngữ ứng dụng ở lần đồng bộ gần nhất: {locale}",
|
|
34835
|
+
"ui.settings.language.general.no_resolution": "Chưa đặt ngôn ngữ ứng dụng.",
|
|
34836
|
+
"ui.settings.language.general.pending": "Đang lưu ngôn ngữ…",
|
|
34837
|
+
"ui.settings.language.general.readback_error": "Đã xác nhận lưu nhưng chưa kiểm tra được cài đặt hiện tại. Kết nối lại hoặc thử lại trước khi đổi lần nữa.",
|
|
34838
|
+
"ui.settings.language.general.saved": "Đã lưu ngôn ngữ.",
|
|
34839
|
+
"ui.settings.language.general.system": "Theo hệ thống",
|
|
34840
|
+
"ui.settings.language.general.unavailable_choice": "Không khả dụng",
|
|
34841
|
+
"ui.settings.language.general.write_error": "Chưa lưu ngôn ngữ. Cài đặt trước đó vẫn giữ nguyên. {message}",
|
|
34842
|
+
"ui.settings.language.palette_action": "Đổi ngôn ngữ giao diện",
|
|
34843
|
+
"ui.settings.page.title": "Cài đặt",
|
|
34844
|
+
"ui.settings.profile.description_anonymous": "Thông tin hồ sơ người dùng hiển thị trong ứng dụng. Thông tin này không được cung cấp cho các tác nhân.",
|
|
34845
|
+
"ui.settings.profile.description_authenticated": "Thông tin hồ sơ người dùng hiển thị trong ứng dụng. Thông tin này không được cung cấp cho các tác nhân. Chi tiết hồ sơ được lấy từ tài khoản Radient của bạn.",
|
|
34846
|
+
"ui.settings.profile.display_name.label": "Tên hiển thị",
|
|
34847
|
+
"ui.settings.profile.display_name.placeholder": "Nhập tên của bạn…",
|
|
34848
|
+
"ui.settings.profile.email.label": "Địa chỉ email",
|
|
34849
|
+
"ui.settings.profile.email.placeholder": "Nhập email của bạn…",
|
|
34850
|
+
"ui.settings.profile.title": "Hồ sơ người dùng",
|
|
34851
|
+
"ui.settings.section.interface_language.help": "Ngôn ngữ giao diện dùng chung với cửa sổ dòng lệnh. auto theo ngôn ngữ hệ điều hành; nếu không hỗ trợ thì dùng tiếng Anh.",
|
|
34852
|
+
"ui.settings.section.interface_language.label": "Ngôn ngữ giao diện",
|
|
34853
|
+
"ui.settings.tour.action": "Xem hướng dẫn",
|
|
34854
|
+
"ui.settings.tour.description": "Bạn đã bỏ lỡ phần hướng dẫn làm quen với ứng dụng hoặc muốn xem lại? Bắt đầu lại tại đây.",
|
|
34855
|
+
"ui.settings.tour.title": "Hướng dẫn ứng dụng",
|
|
34856
|
+
"ui.settings.profile.account_checking": "Đang kiểm tra tài khoản Radient của bạn…",
|
|
34857
|
+
"ui.settings.profile.account_read_failed_retry": "Không đọc được tài khoản Radient của bạn, nên tên và email bên dưới chỉ là thông tin mẫu, không phải thông tin tài khoản của bạn. Thử lại.",
|
|
34858
|
+
"ui.settings.profile.account_read_failed_refused": "Không đọc được tài khoản Radient của bạn, nên tên và email bên dưới chỉ là thông tin mẫu, không phải thông tin tài khoản của bạn. Thử lại hoặc đăng nhập lại vào Radient.",
|
|
34859
|
+
"ui.settings.profile.retry": "Thử lại",
|
|
34860
|
+
"ui.settings.profile.retrying": "Đang thử lại"
|
|
34861
|
+
};
|
|
34288
34862
|
const bundledEnglish = {
|
|
34863
|
+
...enUiAgentMessages,
|
|
34289
34864
|
...enUiAgentsDialogs,
|
|
34290
34865
|
...enUiAgents,
|
|
34291
34866
|
...enUiAgentsModels,
|
|
@@ -34335,10 +34910,25 @@ const bundledEnglish = {
|
|
|
34335
34910
|
};
|
|
34336
34911
|
const bundledCatalogues = {
|
|
34337
34912
|
en: bundledEnglish,
|
|
34913
|
+
es: {
|
|
34914
|
+
...esUiConsole,
|
|
34915
|
+
...esUiOnboarding,
|
|
34916
|
+
...esUiSettings
|
|
34917
|
+
},
|
|
34338
34918
|
fr: {
|
|
34339
34919
|
...frUiConsole,
|
|
34340
34920
|
...frUiOnboarding,
|
|
34341
34921
|
...frUiSettings
|
|
34922
|
+
},
|
|
34923
|
+
ru: {
|
|
34924
|
+
...ruUiConsole,
|
|
34925
|
+
...ruUiOnboarding,
|
|
34926
|
+
...ruUiSettings
|
|
34927
|
+
},
|
|
34928
|
+
vi: {
|
|
34929
|
+
...viUiConsole,
|
|
34930
|
+
...viUiOnboarding,
|
|
34931
|
+
...viUiSettings
|
|
34342
34932
|
}
|
|
34343
34933
|
};
|
|
34344
34934
|
const DEFAULT_LOCALE = "en";
|