local-operator-ui 0.34.50 → 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.
- package/out/main/index.js +435 -1
- package/out/preload/index.js +89 -1
- package/out/renderer/assets/{_basePickBy-CSwEaqGH.js → _basePickBy-BBI090Ro.js} +1 -1
- package/out/renderer/assets/{_baseUniq-ClgJBEui.js → _baseUniq-y9eYAjJc.js} +1 -1
- package/out/renderer/assets/{agent-details-page-v9g-0tfN.js → agent-details-page-Danlk2zO.js} +2 -2
- package/out/renderer/assets/{agent-hub-page-i9l6Uv6w.js → agent-hub-page-A3Wue4nD.js} +2 -2
- package/out/renderer/assets/{agents-page-BEY9jzic.js → agents-page-bAs2li1H.js} +3 -3
- package/out/renderer/assets/{arc-Bp2vhvT8.js → arc-EdrxyDyX.js} +1 -1
- package/out/renderer/assets/{architectureDiagram-IEHRJDOE-mnxRnj85.js → architectureDiagram-IEHRJDOE-CFijMKZj.js} +1 -1
- package/out/renderer/assets/{blockDiagram-JOT3LUYC-Cy0bUbS1.js → blockDiagram-JOT3LUYC-C6H7Lqpk.js} +1 -1
- package/out/renderer/assets/{book-open-CwvcZLaU.js → book-open-DWHX0zOs.js} +1 -1
- package/out/renderer/assets/browser-page-tFPFpCOA.js +1 -0
- package/out/renderer/assets/browser-webauthn-prompt-ysRT3f9c.js +1 -0
- package/out/renderer/assets/{c4Diagram-VJAJSXHY-BLgwrX8R.js → c4Diagram-VJAJSXHY-CO2Zz-2B.js} +1 -1
- package/out/renderer/assets/channel-G1rkDF64.js +1 -0
- package/out/renderer/assets/{chunk-4BMEZGHF-BKbXn5lz.js → chunk-4BMEZGHF-D-tQMamL.js} +1 -1
- package/out/renderer/assets/{chunk-A2AXSNBT-huAEN9rv.js → chunk-A2AXSNBT-IlsswVGN.js} +1 -1
- package/out/renderer/assets/{chunk-AEK57VVT-CLlndZHa.js → chunk-AEK57VVT-CcXRuF87.js} +1 -1
- package/out/renderer/assets/{chunk-D6G4REZN-BQoQzkpH.js → chunk-D6G4REZN-NA6aMjOa.js} +1 -1
- package/out/renderer/assets/{chunk-RZ5BOZE2-BS-67Htk.js → chunk-RZ5BOZE2-D30p6MvF.js} +1 -1
- package/out/renderer/assets/{chunk-XZIHB7SX-B413LPHS.js → chunk-XZIHB7SX-DuGlTQyM.js} +1 -1
- package/out/renderer/assets/classDiagram-GIVACNV2-Cnz7pTLc.js +1 -0
- package/out/renderer/assets/classDiagram-v2-COTLJTTW-Cnz7pTLc.js +1 -0
- package/out/renderer/assets/clone-CorBC-J6.js +1 -0
- package/out/renderer/assets/{console-mirror-atIrzrKQ.js → console-mirror-6kLMvB-0.js} +1 -1
- package/out/renderer/assets/{consoleCapture-qbkQDsbk.js → consoleCapture-CfzJzLhS.js} +1 -1
- package/out/renderer/assets/{conversation-input-sync-B0j1FBwv.js → conversation-input-sync-BPcyjSvm.js} +256 -256
- package/out/renderer/assets/{dagre-OKDRZEBW-fZfOS2dk.js → dagre-OKDRZEBW-lUK01kt3.js} +1 -1
- package/out/renderer/assets/{diagram-SSKATNLV-alPaSAsa.js → diagram-SSKATNLV-p9gVP7bS.js} +1 -1
- package/out/renderer/assets/{diagram-VNBRO52H-12nwGS_H.js → diagram-VNBRO52H-CCftRDC_.js} +1 -1
- package/out/renderer/assets/{erDiagram-Q7BY3M3F-C0VQmN1m.js → erDiagram-Q7BY3M3F-BKi9l2Z-.js} +1 -1
- package/out/renderer/assets/{error-boundary-C0P2AR1t.js → error-boundary-DrP0vaXu.js} +1 -1
- package/out/renderer/assets/{flowDiagram-4HSFHLVR-yAA_68VC.js → flowDiagram-4HSFHLVR-BP7Ny2Be.js} +1 -1
- package/out/renderer/assets/{ganttDiagram-APWFNJXF-Cbk4f_uq.js → ganttDiagram-APWFNJXF-ISsPQchm.js} +1 -1
- package/out/renderer/assets/{gitGraphDiagram-7IBYFJ6S-C9o_Zz5H.js → gitGraphDiagram-7IBYFJ6S-SgeuOn3n.js} +1 -1
- package/out/renderer/assets/{graph-DUT-8BVr.js → graph-t6x189od.js} +1 -1
- package/out/renderer/assets/{index-B0uYixKz.js → index-2rX7wBIY.js} +1 -1
- package/out/renderer/assets/index-4n12XlDn.js +57 -0
- package/out/renderer/assets/{index-lYsxfVy0.js → index-B8oCfucM.js} +199 -199
- package/out/renderer/assets/{index-Cun5ZiJ8.js → index-BFjdZgP2.js} +1 -1
- package/out/renderer/assets/index-DAzaIteC.css +1 -0
- package/out/renderer/assets/{infoDiagram-PH2N3AL5-C4KvWN4_.js → infoDiagram-PH2N3AL5-DphTiVRC.js} +1 -1
- package/out/renderer/assets/{installer-CraQMM0S.js → installer-BRkp5wZg.js} +1 -1
- package/out/renderer/assets/{journeyDiagram-U35MCT3I-ClDn4ZZ_.js → journeyDiagram-U35MCT3I-DN4aJTUJ.js} +1 -1
- package/out/renderer/assets/{kanban-definition-NDS4AKOZ-DkZ2IqSy.js → kanban-definition-NDS4AKOZ-BN-JsNf0.js} +1 -1
- package/out/renderer/assets/{layout-B2ULRxc7.js → layout-zr9knmov.js} +1 -1
- package/out/renderer/assets/{legacy-agents-page-BHmNHE9c.js → legacy-agents-page-DrBberC9.js} +5 -5
- package/out/renderer/assets/{mermaid.core-DwfN45qZ.js → mermaid.core-C8wK03d9.js} +5 -5
- package/out/renderer/assets/mesh-page-Cznif7T9.js +1 -0
- package/out/renderer/assets/{mindmap-definition-ALO5MXBD-BaruaCsh.js → mindmap-definition-ALO5MXBD-kRmzBSCA.js} +1 -1
- package/out/renderer/assets/{mini-y-vZHWd4.js → mini-laXMgc8g.js} +1 -1
- package/out/renderer/assets/{notebook-pen-Bufwjei-.js → notebook-pen-DaklP6yV.js} +1 -1
- package/out/renderer/assets/{org-access-BHVNNfiF.js → org-access-CJhXZXGW.js} +1 -1
- package/out/renderer/assets/{org-surface-gate-Bu2ppyy0.js → org-surface-gate-CR9uyltG.js} +1 -1
- package/out/renderer/assets/{page-header-CzdhP1vT.js → page-header-CQRx3tBw.js} +1 -1
- package/out/renderer/assets/{pieDiagram-IB7DONF6-D6b-IA5_.js → pieDiagram-IB7DONF6-lJ1-pGOT.js} +1 -1
- package/out/renderer/assets/{projects-page-B2p6409_.js → projects-page-CdxIUECN.js} +5 -5
- package/out/renderer/assets/{publication-validation-DV7MFEnt.js → publication-validation-BP-55Qal.js} +1 -1
- package/out/renderer/assets/{quadrantDiagram-7GDLP6J5-BohSnqJt.js → quadrantDiagram-7GDLP6J5-BwX2blj8.js} +1 -1
- package/out/renderer/assets/{radar-MK3ICKWK-B8IyfRFK.js → radar-MK3ICKWK-CHfQEdqv.js} +1 -1
- package/out/renderer/assets/{radient-auth-buttons-CeAmJxoU.js → radient-auth-buttons-CpPCcIG3.js} +1 -1
- package/out/renderer/assets/{requirementDiagram-KVF5MWMF-CjxwfVmm.js → requirementDiagram-KVF5MWMF-CQPbhFhi.js} +1 -1
- package/out/renderer/assets/{sankeyDiagram-QLVOVGJD-Dmb58RjS.js → sankeyDiagram-QLVOVGJD-CTYu_uCM.js} +1 -1
- package/out/renderer/assets/{schedules-page-Dujbkmf1.js → schedules-page-DIv7xYku.js} +1 -1
- package/out/renderer/assets/{sequenceDiagram-X6HHIX6F-H7CVraeF.js → sequenceDiagram-X6HHIX6F-D1LnOKwi.js} +1 -1
- package/out/renderer/assets/{settings-page-tA2lkM1h.js → settings-page-CUX_P2c8.js} +1 -1
- package/out/renderer/assets/{stateDiagram-DGXRK772-DJN0Rf3F.js → stateDiagram-DGXRK772-BAJRIEa3.js} +1 -1
- package/out/renderer/assets/stateDiagram-v2-YXO3MK2T-CxmFrTkZ.js +1 -0
- package/out/renderer/assets/{timeline-definition-BDJGKUSR-0g8a7xFr.js → timeline-definition-BDJGKUSR-CBNE00Vi.js} +1 -1
- package/out/renderer/assets/ui-preferences-store-n9FM23w3.js +1 -0
- package/out/renderer/assets/{use-download-agent-mutation-Doz1TzJr.js → use-download-agent-mutation-NKo_cZoz.js} +2 -2
- package/out/renderer/assets/{use-memberships-query-CjMpjmh2.js → use-memberships-query-B4hJezFB.js} +1 -1
- package/out/renderer/assets/{use-session-snapshot-CoJrqYcV.js → use-session-snapshot-BrSeTlVQ.js} +1 -1
- package/out/renderer/assets/{xychartDiagram-VJFVF3MP-Cn4PWpai.js → xychartDiagram-VJFVF3MP-NqieI4kO.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",
|
|
@@ -34136,6 +34261,155 @@ const enUiShellRail = {
|
|
|
34136
34261
|
"ui.shell.rail.console.tooltip": "{state, select, open {Close console{chord}} other {Open console{chord}}}",
|
|
34137
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}}"
|
|
34138
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
|
+
};
|
|
34139
34413
|
const frUiConsole = {
|
|
34140
34414
|
"ui.console.close.body": "Le programme en cours sera arrêté et son onglet supprimé.",
|
|
34141
34415
|
"ui.console.close.busy": "Fermeture…",
|
|
@@ -34285,7 +34559,157 @@ const frUiSettings = {
|
|
|
34285
34559
|
"ui.settings.profile.retry": "Réessayer",
|
|
34286
34560
|
"ui.settings.profile.retrying": "Nouvel essai"
|
|
34287
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
|
+
};
|
|
34288
34711
|
const bundledEnglish = {
|
|
34712
|
+
...enUiAgentMessages,
|
|
34289
34713
|
...enUiAgentsDialogs,
|
|
34290
34714
|
...enUiAgents,
|
|
34291
34715
|
...enUiAgentsModels,
|
|
@@ -34335,10 +34759,20 @@ const bundledEnglish = {
|
|
|
34335
34759
|
};
|
|
34336
34760
|
const bundledCatalogues = {
|
|
34337
34761
|
en: bundledEnglish,
|
|
34762
|
+
es: {
|
|
34763
|
+
...esUiConsole,
|
|
34764
|
+
...esUiOnboarding,
|
|
34765
|
+
...esUiSettings
|
|
34766
|
+
},
|
|
34338
34767
|
fr: {
|
|
34339
34768
|
...frUiConsole,
|
|
34340
34769
|
...frUiOnboarding,
|
|
34341
34770
|
...frUiSettings
|
|
34771
|
+
},
|
|
34772
|
+
ru: {
|
|
34773
|
+
...ruUiConsole,
|
|
34774
|
+
...ruUiOnboarding,
|
|
34775
|
+
...ruUiSettings
|
|
34342
34776
|
}
|
|
34343
34777
|
};
|
|
34344
34778
|
const DEFAULT_LOCALE = "en";
|
package/out/preload/index.js
CHANGED
|
@@ -87,6 +87,67 @@ function readTelemetryArgument(argv) {
|
|
|
87
87
|
const BACKEND_STATUS_CHANNEL = "backend-status";
|
|
88
88
|
const BACKEND_STATUS_EVENT = "backend-status-changed";
|
|
89
89
|
const BACKEND_RECONNECT_CHANNEL = "backend-reconnect";
|
|
90
|
+
const agentMessagesBoundarySchema = zod.z.enum([
|
|
91
|
+
"app_start",
|
|
92
|
+
"sign_in",
|
|
93
|
+
"window_focus",
|
|
94
|
+
"surface_open"
|
|
95
|
+
]);
|
|
96
|
+
const endpointSchema = zod.z.object({
|
|
97
|
+
id: zod.z.string().min(1),
|
|
98
|
+
state: zod.z.enum(["active", "paused", "disabled"])
|
|
99
|
+
}).passthrough();
|
|
100
|
+
const tenantSchema = zod.z.object({
|
|
101
|
+
tenant_id: zod.z.string().min(1),
|
|
102
|
+
tenant_name: zod.z.string().optional(),
|
|
103
|
+
eligible: zod.z.boolean(),
|
|
104
|
+
endpoint: endpointSchema.nullable()
|
|
105
|
+
}).passthrough();
|
|
106
|
+
const agentMessagesRefusalSchema = zod.z.object({
|
|
107
|
+
code: zod.z.string(),
|
|
108
|
+
message: zod.z.string(),
|
|
109
|
+
details: zod.z.record(zod.z.unknown()).optional(),
|
|
110
|
+
retry_after_seconds: zod.z.number().optional()
|
|
111
|
+
}).passthrough();
|
|
112
|
+
zod.z.object({
|
|
113
|
+
capability: zod.z.number(),
|
|
114
|
+
// Missing on frozen H1: absence forbids consent writes, not status reads.
|
|
115
|
+
consent_account_guard: zod.z.boolean().optional(),
|
|
116
|
+
state: zod.z.enum(["ready", "signed_out", "unavailable", "update_required"]),
|
|
117
|
+
account_id: zod.z.string().nullable(),
|
|
118
|
+
tenant_id: zod.z.string().nullable(),
|
|
119
|
+
surface_state: zod.z.enum(["A", "B", "C", "D", "E", "F", "G"]).nullable(),
|
|
120
|
+
visibility: zod.z.object({
|
|
121
|
+
settings: zod.z.boolean(),
|
|
122
|
+
inbox: zod.z.boolean(),
|
|
123
|
+
account_door: zod.z.boolean(),
|
|
124
|
+
onboarding: zod.z.boolean()
|
|
125
|
+
}),
|
|
126
|
+
update_required: zod.z.boolean(),
|
|
127
|
+
local: zod.z.object({
|
|
128
|
+
enabled: zod.z.boolean(),
|
|
129
|
+
onboarding: zod.z.string(),
|
|
130
|
+
session: zod.z.string()
|
|
131
|
+
}),
|
|
132
|
+
status: zod.z.object({
|
|
133
|
+
tenants: zod.z.array(tenantSchema)
|
|
134
|
+
}).passthrough().nullable(),
|
|
135
|
+
consent: zod.z.object({
|
|
136
|
+
version: zod.z.string().min(1).max(128),
|
|
137
|
+
text: zod.z.string().min(1).refine(
|
|
138
|
+
(text) => new TextEncoder().encode(text).length <= 2048,
|
|
139
|
+
"Consent exceeds the served-text contract"
|
|
140
|
+
),
|
|
141
|
+
source: zod.z.enum(["served", "cached", "embedded"])
|
|
142
|
+
}).nullable(),
|
|
143
|
+
error: agentMessagesRefusalSchema.nullable()
|
|
144
|
+
}).passthrough();
|
|
145
|
+
zod.z.object({
|
|
146
|
+
endpoint: endpointSchema.extend({
|
|
147
|
+
account_id: zod.z.string().min(1),
|
|
148
|
+
tenant_id: zod.z.string().min(1)
|
|
149
|
+
})
|
|
150
|
+
}).passthrough();
|
|
90
151
|
const id = zod.z.string().min(1).max(128).regex(/^[a-zA-Z0-9_-]+$/);
|
|
91
152
|
const settingKey = zod.z.string().min(1).max(256).regex(/^[a-zA-Z0-9_][a-zA-Z0-9_.-]*$/);
|
|
92
153
|
const secret = zod.z.string().min(1).max(32768);
|
|
@@ -595,7 +656,18 @@ const desktopRequestUnion = zod.z.discriminatedUnion("op", [
|
|
|
595
656
|
scope_kind: catalogueScopeKind.optional(),
|
|
596
657
|
scope_name: catalogueScopeName.optional(),
|
|
597
658
|
cursor: catalogueCursor.optional(),
|
|
598
|
-
with_counts: zod.z.boolean().optional()
|
|
659
|
+
with_counts: zod.z.boolean().optional(),
|
|
660
|
+
/*
|
|
661
|
+
* THE ORDER THE PAGE IS READ IN (`session_catalogue_sort`), optional and
|
|
662
|
+
* gated on that capability for the same reason the paging four are: a daemon
|
|
663
|
+
* that predates the parameter IGNORES it silently, so an un-gated client
|
|
664
|
+
* would receive the rank order under a request that asked for the activity
|
|
665
|
+
* one - a page whose membership is a wake band, which is the exact defect
|
|
666
|
+
* this parameter exists to remove. `activity` is the one value today; a
|
|
667
|
+
* literal rather than a string so a typo is a type error here rather than a
|
|
668
|
+
* refusal from the route.
|
|
669
|
+
*/
|
|
670
|
+
sort: zod.z.literal("activity").optional()
|
|
599
671
|
}).strict(),
|
|
600
672
|
/*
|
|
601
673
|
* Acknowledge the one-time delegated-cleanup notice:
|
|
@@ -2078,6 +2150,22 @@ const desktopRequestUnion = zod.z.discriminatedUnion("op", [
|
|
|
2078
2150
|
zod.z.object({ op: zod.z.literal("auth.cancel"), id }).strict(),
|
|
2079
2151
|
zod.z.object({ op: zod.z.literal("auth.key"), provider: id, value: secret }).strict(),
|
|
2080
2152
|
zod.z.object({ op: zod.z.literal("auth.logout"), provider: id }).strict(),
|
|
2153
|
+
/*
|
|
2154
|
+
* Local bearer only: the harness owns Radient OAuth and organization policy.
|
|
2155
|
+
* The account guard is local-only and is stripped before the hub write.
|
|
2156
|
+
*/
|
|
2157
|
+
zod.z.object({
|
|
2158
|
+
op: zod.z.literal("agent_messages.status"),
|
|
2159
|
+
boundary: agentMessagesBoundarySchema
|
|
2160
|
+
}).strict(),
|
|
2161
|
+
zod.z.object({
|
|
2162
|
+
op: zod.z.literal("agent_messages.enable"),
|
|
2163
|
+
expected_account_id: id,
|
|
2164
|
+
tenant_id: id,
|
|
2165
|
+
state: zod.z.literal("active"),
|
|
2166
|
+
consent_version: zod.z.string().min(1).max(128),
|
|
2167
|
+
consented_via: zod.z.literal("dialog")
|
|
2168
|
+
}).strict(),
|
|
2081
2169
|
zod.z.object({ op: zod.z.literal("settings.list") }).strict(),
|
|
2082
2170
|
zod.z.object({
|
|
2083
2171
|
op: zod.z.literal("settings.edit"),
|