local-operator-ui 0.42.2 → 0.42.4
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 +2344 -173
- package/out/preload/browser-approvals-overlay.js +15 -0
- package/out/preload/index.js +45 -1
- package/out/renderer/assets/{_basePickBy-BA9uepHv.js → _basePickBy-CvLnUv7q.js} +1 -1
- package/out/renderer/assets/{_baseUniq-CVACH15m.js → _baseUniq-BKrt6A4N.js} +1 -1
- package/out/renderer/assets/{agent-details-page-xNTNJ7kP.js → agent-details-page-BWSojjKJ.js} +2 -2
- package/out/renderer/assets/{agent-hub-page-B-zE3Ln0.js → agent-hub-page-aubDNr6m.js} +1 -1
- package/out/renderer/assets/agents-page-DeOCoJow.js +7 -0
- package/out/renderer/assets/{approvalsOverlay-BBr6f98F.css → approvalsOverlay-CX3DxhSv.css} +1 -1
- package/out/renderer/assets/approvalsOverlay-jdsSQYbC.js +1 -0
- package/out/renderer/assets/{arc-DYIy54Kn.js → arc-Bo9HqcA4.js} +1 -1
- package/out/renderer/assets/{architectureDiagram-IEHRJDOE-CmfaKw-J.js → architectureDiagram-IEHRJDOE-CjpgkGSs.js} +1 -1
- package/out/renderer/assets/{blockDiagram-JOT3LUYC-bQf90tJr.js → blockDiagram-JOT3LUYC-CkF9oOcr.js} +1 -1
- package/out/renderer/assets/{book-open-iGajLTwQ.js → book-open-CPvwVqAp.js} +1 -1
- package/out/renderer/assets/browser-page-DUwB_Shx.js +1 -0
- package/out/renderer/assets/{browser-webauthn-prompt-DX5l4JNA.js → browser-webauthn-prompt-D90b-ibP.js} +1 -1
- package/out/renderer/assets/{building-2-bjja6JTC.js → building-2-CTbbzJRN.js} +1 -1
- package/out/renderer/assets/{c4Diagram-VJAJSXHY-BxIFIYVW.js → c4Diagram-VJAJSXHY-Br-J2zii.js} +1 -1
- package/out/renderer/assets/channel-bs4gvJO_.js +1 -0
- package/out/renderer/assets/{chunk-4BMEZGHF-C2LQ_mlD.js → chunk-4BMEZGHF-Cch4oIqI.js} +1 -1
- package/out/renderer/assets/{chunk-A2AXSNBT-BKH53MbC.js → chunk-A2AXSNBT-BpTLsrEt.js} +1 -1
- package/out/renderer/assets/{chunk-AEK57VVT-CuB5dlAL.js → chunk-AEK57VVT-BA_p-1wW.js} +1 -1
- package/out/renderer/assets/{chunk-D6G4REZN-CECeg3Wn.js → chunk-D6G4REZN-C85KCEHq.js} +1 -1
- package/out/renderer/assets/{chunk-RZ5BOZE2-D-zkJWYc.js → chunk-RZ5BOZE2-Y0y4RocF.js} +1 -1
- package/out/renderer/assets/{chunk-XZIHB7SX-DstteBuH.js → chunk-XZIHB7SX-DK_cB1Vj.js} +1 -1
- package/out/renderer/assets/classDiagram-GIVACNV2-CEJVrd67.js +1 -0
- package/out/renderer/assets/classDiagram-v2-COTLJTTW-CEJVrd67.js +1 -0
- package/out/renderer/assets/clone-BAbNoxcV.js +1 -0
- package/out/renderer/assets/{console-mirror-gqAdwBWl.js → console-mirror-BiiClM8r.js} +1 -1
- package/out/renderer/assets/{consoleCapture-BQQVRcXT.js → consoleCapture-OAXBv_kp.js} +1 -1
- package/out/renderer/assets/{conversation-input-sync-grry80zS.js → conversation-input-sync-BXv32NfB.js} +253 -253
- package/out/renderer/assets/{dagre-OKDRZEBW-D6RBxeJd.js → dagre-OKDRZEBW-C9TMqwJP.js} +1 -1
- package/out/renderer/assets/{diagram-SSKATNLV--xUREIPn.js → diagram-SSKATNLV-SI8XWzeq.js} +1 -1
- package/out/renderer/assets/{diagram-VNBRO52H-BYjZ86BM.js → diagram-VNBRO52H-DnvHZL8L.js} +1 -1
- package/out/renderer/assets/{erDiagram-Q7BY3M3F-CmajcoOO.js → erDiagram-Q7BY3M3F-nWqxZ0l9.js} +1 -1
- package/out/renderer/assets/error-boundary-CqZRoe9S.js +126 -0
- package/out/renderer/assets/{flowDiagram-4HSFHLVR-CtQab7ap.js → flowDiagram-4HSFHLVR-DKJUboz2.js} +1 -1
- package/out/renderer/assets/{ganttDiagram-APWFNJXF-CuKez3d0.js → ganttDiagram-APWFNJXF-D0s8LZxz.js} +1 -1
- package/out/renderer/assets/{gitGraphDiagram-7IBYFJ6S-D9QOaWwN.js → gitGraphDiagram-7IBYFJ6S-DOu6eUhN.js} +1 -1
- package/out/renderer/assets/{graph-Ccifoj7G.js → graph-D4HJHitc.js} +1 -1
- package/out/renderer/assets/{hash-EZ0d40pW.js → hash-CzjTtP10.js} +1 -1
- package/out/renderer/assets/{heart-Bo3ZudoI.js → heart-B3mi-jou.js} +1 -1
- package/out/renderer/assets/{index-Dw4hyitu.js → index-CmbVW2m7.js} +1 -1
- package/out/renderer/assets/{index-CLJ4-1jd.js → index-D8glNEcT.js} +1 -1
- package/out/renderer/assets/index-UXcKfWo6.css +1 -0
- package/out/renderer/assets/index-wz2cjW5P.js +830 -0
- package/out/renderer/assets/infoDiagram-PH2N3AL5-DzTCSaMw.js +2 -0
- package/out/renderer/assets/{installer-B7DhTrnG.js → installer-DmYDl1Bg.js} +1 -1
- package/out/renderer/assets/{journeyDiagram-U35MCT3I-YTjOSo-b.js → journeyDiagram-U35MCT3I-BXdBmrLL.js} +1 -1
- package/out/renderer/assets/{kanban-definition-NDS4AKOZ-C1UmNEaT.js → kanban-definition-NDS4AKOZ-B-oT4qjy.js} +1 -1
- package/out/renderer/assets/{layout-CWPZ7noV.js → layout-C35xWGut.js} +1 -1
- package/out/renderer/assets/{legacy-agents-page-ikCownYN.js → legacy-agents-page-zQ2FJ-pr.js} +4 -4
- package/out/renderer/assets/library-page-CB9dDvmn.js +157 -0
- package/out/renderer/assets/{mermaid.core-B_nZt27J.js → mermaid.core-5QYeuhdV.js} +5 -5
- package/out/renderer/assets/mesh-page-SxvMrMpp.js +1 -0
- package/out/renderer/assets/messages-Cq_3N7VC.js +3 -0
- package/out/renderer/assets/{mindmap-definition-ALO5MXBD-D-Y3n0RT.js → mindmap-definition-ALO5MXBD-B-cLhV3I.js} +1 -1
- package/out/renderer/assets/{mini-BdCfujvn.js → mini-BH-IxQ6K.js} +1 -1
- package/out/renderer/assets/{notebook-pen-BvZPJ7Yv.js → notebook-pen-FphG2dMG.js} +1 -1
- package/out/renderer/assets/{org-access-C1u_2VVY.js → org-access-DVt3GFMX.js} +1 -1
- package/out/renderer/assets/{org-surface-gate-CyIC6H59.js → org-surface-gate-tHnRzD9A.js} +1 -1
- package/out/renderer/assets/{page-header-C9IFgiIB.js → page-header-B3bOo0UX.js} +1 -1
- package/out/renderer/assets/path-utils-BkJr3--b.js +58 -0
- package/out/renderer/assets/{pieDiagram-IB7DONF6-BJ2PZoWa.js → pieDiagram-IB7DONF6-CrHoOvO2.js} +1 -1
- package/out/renderer/assets/projects-page-ACh1mgoo.js +45 -0
- package/out/renderer/assets/{publication-validation-DAffiuLy.js → publication-validation-D2z_zWQT.js} +1 -1
- package/out/renderer/assets/{quadrantDiagram-7GDLP6J5-Dpr0N86G.js → quadrantDiagram-7GDLP6J5-DYDa1ECN.js} +1 -1
- package/out/renderer/assets/{radar-MK3ICKWK-CwLLK6fK.js → radar-MK3ICKWK-vDf2Es_C.js} +1 -1
- package/out/renderer/assets/{radient-auth-buttons-DN7K_uGZ.js → radient-auth-buttons-Di1zLV23.js} +1 -1
- package/out/renderer/assets/{requirementDiagram-KVF5MWMF-LI2fP6nJ.js → requirementDiagram-KVF5MWMF-ChyAHYwK.js} +1 -1
- package/out/renderer/assets/{sankeyDiagram-QLVOVGJD-uUOWgFO1.js → sankeyDiagram-QLVOVGJD-D9wd8zQP.js} +1 -1
- package/out/renderer/assets/{schedules-page-Cf1PQGDR.js → schedules-page-BA4nO5Tw.js} +2 -2
- package/out/renderer/assets/{sequenceDiagram-X6HHIX6F-DperbqVG.js → sequenceDiagram-X6HHIX6F-CBIVQtEP.js} +1 -1
- package/out/renderer/assets/{settings-page-CrnST8YF.js → settings-page-D5KhLQHE.js} +3 -3
- package/out/renderer/assets/{smartart-qEAWtDlk.js → smartart-58otsUWh.js} +1 -1
- package/out/renderer/assets/{stateDiagram-DGXRK772-RvRbNkSX.js → stateDiagram-DGXRK772-DxVyPUM2.js} +1 -1
- package/out/renderer/assets/stateDiagram-v2-YXO3MK2T-BAggpoNG.js +1 -0
- package/out/renderer/assets/team-bridge-page-CJdJd9cs.js +16 -0
- package/out/renderer/assets/{timeline-definition-BDJGKUSR-CeQ3AsWj.js → timeline-definition-BDJGKUSR-DRQlSiWd.js} +1 -1
- package/out/renderer/assets/{use-download-agent-mutation-C_zDZ6-1.js → use-download-agent-mutation-BAzM19BL.js} +1 -1
- package/out/renderer/assets/{use-session-snapshot-BMDB4uZ0.js → use-session-snapshot-0k6Oot8j.js} +1 -1
- package/out/renderer/assets/{xychartDiagram-VJFVF3MP-C6-d6maF.js → xychartDiagram-VJFVF3MP-DbSrp_cQ.js} +1 -1
- package/out/renderer/browser-approvals-overlay.html +53 -15
- package/out/renderer/console-capture.html +6 -6
- package/out/renderer/index.html +8 -8
- package/out/renderer/installer.html +5 -5
- package/out/renderer/mini.html +8 -8
- package/package.json +3 -3
- package/out/renderer/assets/agents-page-BeZQ1S7f.js +0 -7
- package/out/renderer/assets/approvalsOverlay-BmSmF8Ga.js +0 -1
- package/out/renderer/assets/browser-page-B63Z8oE2.js +0 -1
- package/out/renderer/assets/channel-Blax8LQd.js +0 -1
- package/out/renderer/assets/classDiagram-GIVACNV2-DA1IQG_V.js +0 -1
- package/out/renderer/assets/classDiagram-v2-COTLJTTW-DA1IQG_V.js +0 -1
- package/out/renderer/assets/clone-mVVuLCMS.js +0 -1
- package/out/renderer/assets/error-boundary-DfTTKe65.js +0 -126
- package/out/renderer/assets/index-ByZv232u.css +0 -1
- package/out/renderer/assets/index-LBzSehKd.js +0 -830
- package/out/renderer/assets/infoDiagram-PH2N3AL5-DrTRSok5.js +0 -2
- package/out/renderer/assets/library-page-DBSSkZvn.js +0 -157
- package/out/renderer/assets/mesh-page-CgjL4HIw.js +0 -1
- package/out/renderer/assets/messages-Bswe4yCX.js +0 -3
- package/out/renderer/assets/path-utils-DC6z9Ymz.js +0 -58
- package/out/renderer/assets/projects-page-CwwrR-j7.js +0 -45
- package/out/renderer/assets/stateDiagram-v2-YXO3MK2T-fK1yLl-v.js +0 -1
- package/out/renderer/assets/team-bridge-page-BgcLwc5M.js +0 -16
- /package/out/renderer/assets/{index-DXk6NfLu.js → index-DhltrflG.js} +0 -0
package/out/main/index.js
CHANGED
|
@@ -116,7 +116,7 @@ zod.z.object({
|
|
|
116
116
|
consent: zod.z.object({
|
|
117
117
|
version: zod.z.string().min(1).max(128),
|
|
118
118
|
text: zod.z.string().min(1).refine(
|
|
119
|
-
(
|
|
119
|
+
(text2) => new TextEncoder().encode(text2).length <= 2048,
|
|
120
120
|
"Consent exceeds the served-text contract"
|
|
121
121
|
),
|
|
122
122
|
source: zod.z.enum(["served", "cached", "embedded"])
|
|
@@ -317,7 +317,45 @@ const importRequestFields = {
|
|
|
317
317
|
const modelSelection = zod.z.object({
|
|
318
318
|
provider: zod.z.string().min(1).max(128),
|
|
319
319
|
model_id: zod.z.string().min(1).max(512),
|
|
320
|
-
reasoning_effort: zod.z.string().min(1).max(64).nullable()
|
|
320
|
+
reasoning_effort: zod.z.string().min(1).max(64).nullable(),
|
|
321
|
+
/*
|
|
322
|
+
* The FAST dial the conversation is born on (issue #1265), when the pane's
|
|
323
|
+
* `/fast` picker asked for one.
|
|
324
|
+
*
|
|
325
|
+
* OPTIONAL, so the three orders a request can carry stay distinguishable:
|
|
326
|
+
* an absent key is "nobody asked" - the body every caller sent before this
|
|
327
|
+
* field existed - `true` asks for the tier, and `false` is the user picking
|
|
328
|
+
* `Off` (the spec's own default, so it moves no byte on a backend that
|
|
329
|
+
* carries the field). It is not DERIVED from the resolved spec here: a
|
|
330
|
+
* renderer that copied the resolved dial onto every draft would assert a
|
|
331
|
+
* choice nobody made, and the authority for "may this model be served
|
|
332
|
+
* fast" is the backend's own `supports_fast_mode` clamp, which refuses
|
|
333
|
+
* `true` with a 422.
|
|
334
|
+
*
|
|
335
|
+
* THIS IS THE RENDERER HALF OF A TWO-REPO CHANGE. The backend half is
|
|
336
|
+
* `DraftModel.fast_mode` in `local-operator` (damianvtran/local-operator#2848,
|
|
337
|
+
* `server/routes/desktop_sessions.py`), published as the capability
|
|
338
|
+
* `features.draft_fast` (`server/features.py`) - the key this renderer reads
|
|
339
|
+
* before it offers `/fast` on a draft (`DesktopFeature` in
|
|
340
|
+
* `desktop-hooks.ts`, `draftSelectionRoute` in `picker-registry.tsx`).
|
|
341
|
+
* VERIFY IT THERE, NOT BY DATE: the core's draft model is
|
|
342
|
+
* `extra="forbid"`, so a backend that does not advertise `draft_fast`
|
|
343
|
+
* refuses the WHOLE body - `422 {"detail": "The request has invalid
|
|
344
|
+
* fields."}` against a core without the field - taking the model and the
|
|
345
|
+
* effort rung down with the dial. A draft pick on such a backend is
|
|
346
|
+
* prevented at the route rather than attempted, and a request that still
|
|
347
|
+
* fails is REFUSED OUT LOUD by `FastPicker` (see `fastPickFailure`) and
|
|
348
|
+
* nothing is recorded on the pane. The field stays declared here because
|
|
349
|
+
* the draft route's own round trip is the one the backend must answer, and
|
|
350
|
+
* a renderer that had to be rewritten for it would be the second spelling
|
|
351
|
+
* this contract exists to prevent.
|
|
352
|
+
*
|
|
353
|
+
* `null` is accepted because a backend that carries the field spells "no
|
|
354
|
+
* choice" that way (`fast_mode: bool | None`, the spelling this contract's
|
|
355
|
+
* `null` mirrors), and the two spellings must mean one thing to every
|
|
356
|
+
* reader.
|
|
357
|
+
*/
|
|
358
|
+
fast_mode: zod.z.boolean().nullable().optional()
|
|
321
359
|
}).strict();
|
|
322
360
|
const profileFields = zod.z.object({
|
|
323
361
|
kind: zod.z.enum(["role", "specialist"]).optional(),
|
|
@@ -6198,15 +6236,15 @@ function readServeRecords(dir) {
|
|
|
6198
6236
|
for (const name of names.sort()) {
|
|
6199
6237
|
if (!name.endsWith(".json")) continue;
|
|
6200
6238
|
const file = path$1.join(dir, name);
|
|
6201
|
-
let
|
|
6239
|
+
let text2;
|
|
6202
6240
|
try {
|
|
6203
|
-
|
|
6241
|
+
text2 = fs.readFileSync(file, "utf8");
|
|
6204
6242
|
} catch {
|
|
6205
6243
|
files.push({ file, record: null, problem: "unreadable" });
|
|
6206
6244
|
continue;
|
|
6207
6245
|
}
|
|
6208
6246
|
try {
|
|
6209
|
-
files.push(parseRecord(JSON.parse(
|
|
6247
|
+
files.push(parseRecord(JSON.parse(text2), file));
|
|
6210
6248
|
} catch {
|
|
6211
6249
|
files.push({ file, record: null, problem: "unparseable" });
|
|
6212
6250
|
}
|
|
@@ -8492,8 +8530,8 @@ function didSourceRebuildLand(input) {
|
|
|
8492
8530
|
}
|
|
8493
8531
|
const GUARD_BYPASS_ADVICE = /--skip-[a-z-]+|--allow-downgrade|--force\b|--no-verify|--ignore-checks/i;
|
|
8494
8532
|
const TERMINAL_INSTRUCTION = /^(?!\S+:\s)(?:git|lop-update|uv|pip|pipx|python\d?|sudo)\b/i;
|
|
8495
|
-
function installDiagnosisLines(
|
|
8496
|
-
const lines =
|
|
8533
|
+
function installDiagnosisLines(text2, maxLines = 6) {
|
|
8534
|
+
const lines = text2.split("\n").map((line) => line.trim()).filter((line) => line.length > 0);
|
|
8497
8535
|
if (lines.length === 0) return "";
|
|
8498
8536
|
const allowed = lines.filter((line) => !GUARD_BYPASS_ADVICE.test(line));
|
|
8499
8537
|
if (allowed.length === 0) return "";
|
|
@@ -11731,8 +11769,8 @@ function runBounded(command, args, env, bounds) {
|
|
|
11731
11769
|
});
|
|
11732
11770
|
}
|
|
11733
11771
|
const NEWLINES = /\r?\n/;
|
|
11734
|
-
const errorTail = (
|
|
11735
|
-
const kept =
|
|
11772
|
+
const errorTail = (text2, lines = 3) => {
|
|
11773
|
+
const kept = text2.split(NEWLINES).map((line) => line.trim()).filter(Boolean);
|
|
11736
11774
|
if (kept.length === 0) return "";
|
|
11737
11775
|
const tail = kept.slice(-lines).join(" | ");
|
|
11738
11776
|
return kept.length > lines ? `… ${tail}` : tail;
|
|
@@ -18216,14 +18254,14 @@ function requireFoldFlowLines() {
|
|
|
18216
18254
|
const FOLD_FLOW = "flow";
|
|
18217
18255
|
const FOLD_BLOCK = "block";
|
|
18218
18256
|
const FOLD_QUOTED = "quoted";
|
|
18219
|
-
function foldFlowLines$1(
|
|
18257
|
+
function foldFlowLines$1(text2, indent, mode = "flow", { indentAtStart, lineWidth = 80, minContentWidth = 20, onFold, onOverflow } = {}) {
|
|
18220
18258
|
if (!lineWidth || lineWidth < 0)
|
|
18221
|
-
return
|
|
18259
|
+
return text2;
|
|
18222
18260
|
if (lineWidth < minContentWidth)
|
|
18223
18261
|
minContentWidth = 0;
|
|
18224
18262
|
const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length);
|
|
18225
|
-
if (
|
|
18226
|
-
return
|
|
18263
|
+
if (text2.length <= endStep)
|
|
18264
|
+
return text2;
|
|
18227
18265
|
const folds = [];
|
|
18228
18266
|
const escapedFolds = {};
|
|
18229
18267
|
let end = lineWidth - indent.length;
|
|
@@ -18240,14 +18278,14 @@ function requireFoldFlowLines() {
|
|
|
18240
18278
|
let escStart = -1;
|
|
18241
18279
|
let escEnd = -1;
|
|
18242
18280
|
if (mode === FOLD_BLOCK) {
|
|
18243
|
-
i = consumeMoreIndentedLines(
|
|
18281
|
+
i = consumeMoreIndentedLines(text2, i, indent.length);
|
|
18244
18282
|
if (i !== -1)
|
|
18245
18283
|
end = i + endStep;
|
|
18246
18284
|
}
|
|
18247
|
-
for (let ch; ch =
|
|
18285
|
+
for (let ch; ch = text2[i += 1]; ) {
|
|
18248
18286
|
if (mode === FOLD_QUOTED && ch === "\\") {
|
|
18249
18287
|
escStart = i;
|
|
18250
|
-
switch (
|
|
18288
|
+
switch (text2[i + 1]) {
|
|
18251
18289
|
case "x":
|
|
18252
18290
|
i += 3;
|
|
18253
18291
|
break;
|
|
@@ -18264,12 +18302,12 @@ function requireFoldFlowLines() {
|
|
|
18264
18302
|
}
|
|
18265
18303
|
if (ch === "\n") {
|
|
18266
18304
|
if (mode === FOLD_BLOCK)
|
|
18267
|
-
i = consumeMoreIndentedLines(
|
|
18305
|
+
i = consumeMoreIndentedLines(text2, i, indent.length);
|
|
18268
18306
|
end = i + indent.length + endStep;
|
|
18269
18307
|
split = void 0;
|
|
18270
18308
|
} else {
|
|
18271
18309
|
if (ch === " " && prev && prev !== " " && prev !== "\n" && prev !== " ") {
|
|
18272
|
-
const next =
|
|
18310
|
+
const next = text2[i + 1];
|
|
18273
18311
|
if (next && next !== " " && next !== "\n" && next !== " ")
|
|
18274
18312
|
split = i;
|
|
18275
18313
|
}
|
|
@@ -18281,12 +18319,12 @@ function requireFoldFlowLines() {
|
|
|
18281
18319
|
} else if (mode === FOLD_QUOTED) {
|
|
18282
18320
|
while (prev === " " || prev === " ") {
|
|
18283
18321
|
prev = ch;
|
|
18284
|
-
ch =
|
|
18322
|
+
ch = text2[i += 1];
|
|
18285
18323
|
overflow = true;
|
|
18286
18324
|
}
|
|
18287
18325
|
const j = i > escEnd + 1 ? i - 2 : escStart - 1;
|
|
18288
18326
|
if (escapedFolds[j])
|
|
18289
|
-
return
|
|
18327
|
+
return text2;
|
|
18290
18328
|
folds.push(j);
|
|
18291
18329
|
escapedFolds[j] = true;
|
|
18292
18330
|
end = j + endStep;
|
|
@@ -18301,39 +18339,39 @@ function requireFoldFlowLines() {
|
|
|
18301
18339
|
if (overflow && onOverflow)
|
|
18302
18340
|
onOverflow();
|
|
18303
18341
|
if (folds.length === 0)
|
|
18304
|
-
return
|
|
18342
|
+
return text2;
|
|
18305
18343
|
if (onFold)
|
|
18306
18344
|
onFold();
|
|
18307
|
-
let res =
|
|
18345
|
+
let res = text2.slice(0, folds[0]);
|
|
18308
18346
|
for (let i2 = 0; i2 < folds.length; ++i2) {
|
|
18309
18347
|
const fold = folds[i2];
|
|
18310
|
-
const end2 = folds[i2 + 1] ||
|
|
18348
|
+
const end2 = folds[i2 + 1] || text2.length;
|
|
18311
18349
|
if (fold === 0)
|
|
18312
18350
|
res = `
|
|
18313
|
-
${indent}${
|
|
18351
|
+
${indent}${text2.slice(0, end2)}`;
|
|
18314
18352
|
else {
|
|
18315
18353
|
if (mode === FOLD_QUOTED && escapedFolds[fold])
|
|
18316
|
-
res += `${
|
|
18354
|
+
res += `${text2[fold]}\\`;
|
|
18317
18355
|
res += `
|
|
18318
|
-
${indent}${
|
|
18356
|
+
${indent}${text2.slice(fold + 1, end2)}`;
|
|
18319
18357
|
}
|
|
18320
18358
|
}
|
|
18321
18359
|
return res;
|
|
18322
18360
|
}
|
|
18323
|
-
function consumeMoreIndentedLines(
|
|
18361
|
+
function consumeMoreIndentedLines(text2, i, indent) {
|
|
18324
18362
|
let end = i;
|
|
18325
18363
|
let start = i + 1;
|
|
18326
|
-
let ch =
|
|
18364
|
+
let ch = text2[start];
|
|
18327
18365
|
while (ch === " " || ch === " ") {
|
|
18328
18366
|
if (i < start + indent) {
|
|
18329
|
-
ch =
|
|
18367
|
+
ch = text2[++i];
|
|
18330
18368
|
} else {
|
|
18331
18369
|
do {
|
|
18332
|
-
ch =
|
|
18370
|
+
ch = text2[++i];
|
|
18333
18371
|
} while (ch && ch !== "\n");
|
|
18334
18372
|
end = i;
|
|
18335
18373
|
start = i + 1;
|
|
18336
|
-
ch =
|
|
18374
|
+
ch = text2[start];
|
|
18337
18375
|
}
|
|
18338
18376
|
}
|
|
18339
18377
|
return end;
|
|
@@ -24760,9 +24798,9 @@ function readConsolePolicy(env = process.env) {
|
|
|
24760
24798
|
}
|
|
24761
24799
|
function readQuickSendValue(env = process.env) {
|
|
24762
24800
|
const file = quickSendConfigPath(env);
|
|
24763
|
-
let
|
|
24801
|
+
let text2;
|
|
24764
24802
|
try {
|
|
24765
|
-
|
|
24803
|
+
text2 = fs.readFileSync(file, "utf8");
|
|
24766
24804
|
} catch (error) {
|
|
24767
24805
|
const code = error.code;
|
|
24768
24806
|
if (code === "ENOENT") {
|
|
@@ -24776,7 +24814,7 @@ function readQuickSendValue(env = process.env) {
|
|
|
24776
24814
|
}
|
|
24777
24815
|
let parsed;
|
|
24778
24816
|
try {
|
|
24779
|
-
parsed = distExports.parse(
|
|
24817
|
+
parsed = distExports.parse(text2);
|
|
24780
24818
|
} catch (error) {
|
|
24781
24819
|
return {
|
|
24782
24820
|
value: DEFAULT_QUICK_SEND_VALUE,
|
|
@@ -25576,7 +25614,7 @@ const CURSOR = /* @__PURE__ */ new Map([
|
|
|
25576
25614
|
["end", { normal: "\x1B[F", application: "\x1BOF" }]
|
|
25577
25615
|
]);
|
|
25578
25616
|
const ENCODER$1 = new TextEncoder();
|
|
25579
|
-
const encodeText = (
|
|
25617
|
+
const encodeText = (text2) => ENCODER$1.encode(text2);
|
|
25580
25618
|
function encodeNamedKey(name, modes) {
|
|
25581
25619
|
const fixed = FIXED.get(name);
|
|
25582
25620
|
if (fixed !== void 0) return encodeText(fixed);
|
|
@@ -25700,8 +25738,8 @@ class Osc133Scanner {
|
|
|
25700
25738
|
}
|
|
25701
25739
|
}
|
|
25702
25740
|
function parseBody(body, offset) {
|
|
25703
|
-
const
|
|
25704
|
-
const [kind, status2] =
|
|
25741
|
+
const text2 = String.fromCharCode(...body);
|
|
25742
|
+
const [kind, status2] = text2.split(";");
|
|
25705
25743
|
const mapped = KINDS[kind];
|
|
25706
25744
|
if (!mapped) return null;
|
|
25707
25745
|
if (status2 === void 0 || status2 === "") {
|
|
@@ -27712,9 +27750,9 @@ async function dispatchConsole(host, method, params) {
|
|
|
27712
27750
|
}
|
|
27713
27751
|
case "console_input": {
|
|
27714
27752
|
const surface = requiredSurface(params.surface);
|
|
27715
|
-
const
|
|
27753
|
+
const text2 = optionalString$1(params.text, "text");
|
|
27716
27754
|
const bytes = optionalBytes(params.bytes);
|
|
27717
|
-
if (
|
|
27755
|
+
if (text2 === void 0 && bytes === void 0) {
|
|
27718
27756
|
throw new ConsoleError(
|
|
27719
27757
|
"internal",
|
|
27720
27758
|
"console_input needs text or bytes; a secret_ref is resolved by the tool before the call",
|
|
@@ -27724,7 +27762,7 @@ async function dispatchConsole(host, method, params) {
|
|
|
27724
27762
|
return host.input(
|
|
27725
27763
|
surface,
|
|
27726
27764
|
{
|
|
27727
|
-
text,
|
|
27765
|
+
text: text2,
|
|
27728
27766
|
bytes,
|
|
27729
27767
|
paste: optionalBoolean$1(params.paste, "paste")
|
|
27730
27768
|
},
|
|
@@ -28260,12 +28298,12 @@ function registerConsoleIpc(options) {
|
|
|
28260
28298
|
});
|
|
28261
28299
|
electron.ipcMain.handle(
|
|
28262
28300
|
"console-input",
|
|
28263
|
-
async (event, surface,
|
|
28301
|
+
async (event, surface, text2) => {
|
|
28264
28302
|
const host = authorize(event);
|
|
28265
|
-
if (typeof
|
|
28303
|
+
if (typeof text2 !== "string") {
|
|
28266
28304
|
throw new Error("Console input must be a string.");
|
|
28267
28305
|
}
|
|
28268
|
-
return host.input(stringOrThrow(surface, "surface"), { text }, "user");
|
|
28306
|
+
return host.input(stringOrThrow(surface, "surface"), { text: text2 }, "user");
|
|
28269
28307
|
}
|
|
28270
28308
|
);
|
|
28271
28309
|
electron.ipcMain.handle(
|
|
@@ -29446,11 +29484,11 @@ function sanitizeRows(value) {
|
|
|
29446
29484
|
const rows = [];
|
|
29447
29485
|
for (const entry of value) {
|
|
29448
29486
|
if (!isRecord$1(entry) || !hasOnlyKeys(entry, ["text", "title"])) return null;
|
|
29449
|
-
const
|
|
29487
|
+
const text2 = sanitizeOverlayText(entry.text, ADDRESS_LIST_MAX_TEXT);
|
|
29450
29488
|
const title = sanitizeOverlayText(entry.title, ADDRESS_LIST_MAX_TITLE);
|
|
29451
|
-
if (
|
|
29452
|
-
if (
|
|
29453
|
-
rows.push({ text, title });
|
|
29489
|
+
if (text2 === null || title === null) return null;
|
|
29490
|
+
if (text2.length === 0) return null;
|
|
29491
|
+
rows.push({ text: text2, title });
|
|
29454
29492
|
}
|
|
29455
29493
|
return rows;
|
|
29456
29494
|
}
|
|
@@ -29571,12 +29609,12 @@ function sanitizeProjection(raw) {
|
|
|
29571
29609
|
if (!NOTICE_KINDS.includes(viewRaw.notice)) {
|
|
29572
29610
|
return { ok: false, reason: "bad_notice" };
|
|
29573
29611
|
}
|
|
29574
|
-
const
|
|
29575
|
-
if (
|
|
29612
|
+
const text2 = sanitizeOverlayText(viewRaw.text, ADDRESS_LIST_MAX_LABEL);
|
|
29613
|
+
if (text2 === null) return { ok: false, reason: "bad_notice_text" };
|
|
29576
29614
|
view = {
|
|
29577
29615
|
kind: "notice",
|
|
29578
29616
|
notice: viewRaw.notice,
|
|
29579
|
-
text
|
|
29617
|
+
text: text2
|
|
29580
29618
|
};
|
|
29581
29619
|
} else {
|
|
29582
29620
|
return { ok: false, reason: "bad_view" };
|
|
@@ -30081,6 +30119,9 @@ class AddressOverlayController {
|
|
|
30081
30119
|
lastSeq;
|
|
30082
30120
|
shownSeq;
|
|
30083
30121
|
lastProjection;
|
|
30122
|
+
/** A sanitized v2 projection whose anchor preceded the matching page rect.
|
|
30123
|
+
* It can resize a hidden reusable child on the next layout, never re-open it. */
|
|
30124
|
+
pendingResizeProjection;
|
|
30084
30125
|
/** The rectangle last applied for a projection. `onLayout`'s unchanged-key
|
|
30085
30126
|
* re-assert uses THIS, never the S1 top-strip rule: an S2 child sits at the
|
|
30086
30127
|
* dock, and re-raising it with the S1 rectangle would move the list. */
|
|
@@ -30161,6 +30202,7 @@ class AddressOverlayController {
|
|
|
30161
30202
|
this.lastSeq = 0;
|
|
30162
30203
|
this.shownSeq = -1;
|
|
30163
30204
|
this.lastProjection = null;
|
|
30205
|
+
this.pendingResizeProjection = null;
|
|
30164
30206
|
this.lastAppliedBounds = null;
|
|
30165
30207
|
this.lastMeasurement = null;
|
|
30166
30208
|
this.themeFact = "absent";
|
|
@@ -30218,6 +30260,7 @@ class AddressOverlayController {
|
|
|
30218
30260
|
else this.suspendPresentation();
|
|
30219
30261
|
return;
|
|
30220
30262
|
}
|
|
30263
|
+
this.resizeDeferredChild(next);
|
|
30221
30264
|
this.hide("layout");
|
|
30222
30265
|
if (this.product && previousKey !== "none") this.emitDismiss("layout");
|
|
30223
30266
|
return;
|
|
@@ -30562,6 +30605,7 @@ class AddressOverlayController {
|
|
|
30562
30605
|
const projection = parsed.projection;
|
|
30563
30606
|
this.themeFact = projection.themeFact;
|
|
30564
30607
|
if (!projection.visible) {
|
|
30608
|
+
this.pendingResizeProjection = null;
|
|
30565
30609
|
if (projection.seq > this.lastSeq) this.lastSeq = projection.seq;
|
|
30566
30610
|
this.hide("projection_hidden");
|
|
30567
30611
|
return { accepted: true, shown: false, reason: null, bounds: null };
|
|
@@ -30615,10 +30659,14 @@ class AddressOverlayController {
|
|
|
30615
30659
|
);
|
|
30616
30660
|
if (bounds === null) {
|
|
30617
30661
|
const tooNarrow = projection.v === 2 && projection.anchor.width < ADDRESS_LIST_MIN_WIDTH_DIP;
|
|
30662
|
+
if (projection.v === 2 && !tooNarrow) {
|
|
30663
|
+
this.pendingResizeProjection = projection;
|
|
30664
|
+
}
|
|
30618
30665
|
return this.refuseProjection(
|
|
30619
30666
|
tooNarrow ? "anchor_too_narrow" : "anchor_inconsistent"
|
|
30620
30667
|
);
|
|
30621
30668
|
}
|
|
30669
|
+
this.pendingResizeProjection = null;
|
|
30622
30670
|
this.generation += 1;
|
|
30623
30671
|
const generation = this.generation;
|
|
30624
30672
|
this.boundTabId = projection.tabId;
|
|
@@ -30681,6 +30729,29 @@ class AddressOverlayController {
|
|
|
30681
30729
|
this.hiddenReason = null;
|
|
30682
30730
|
return { accepted: true, shown: true, reason: null, bounds };
|
|
30683
30731
|
}
|
|
30732
|
+
resizeDeferredChild(snapshot2) {
|
|
30733
|
+
const projection = this.pendingResizeProjection;
|
|
30734
|
+
this.pendingResizeProjection = null;
|
|
30735
|
+
if (this.state === "shown" || projection === null || projection.v !== 2 || projection.tabId !== snapshot2.activeTabId || !snapshot2.presented || snapshot2.contentRect === null) {
|
|
30736
|
+
return;
|
|
30737
|
+
}
|
|
30738
|
+
const bounds = addressListBoundsV2For(
|
|
30739
|
+
projection.anchor,
|
|
30740
|
+
snapshot2.contentRect,
|
|
30741
|
+
projection.view,
|
|
30742
|
+
this.ownerSize()
|
|
30743
|
+
);
|
|
30744
|
+
const view = this.view;
|
|
30745
|
+
if (bounds === null || !view || !this.viewUsable(view)) return;
|
|
30746
|
+
try {
|
|
30747
|
+
const wasVisible = view.getVisible();
|
|
30748
|
+
if (!wasVisible) view.setVisible(true);
|
|
30749
|
+
view.setBounds(bounds);
|
|
30750
|
+
if (!wasVisible) view.setVisible(false);
|
|
30751
|
+
} catch (error) {
|
|
30752
|
+
this.releaseChild(`layout_error:${String(error)}`);
|
|
30753
|
+
}
|
|
30754
|
+
}
|
|
30684
30755
|
refuseProjection(reason, bounds = null) {
|
|
30685
30756
|
this.lastRejected = reason;
|
|
30686
30757
|
this.drop(reason);
|
|
@@ -32054,6 +32125,25 @@ class ApprovalStore {
|
|
|
32054
32125
|
);
|
|
32055
32126
|
}
|
|
32056
32127
|
}
|
|
32128
|
+
const APPROVALS_CARD_DISMISS_CHANNEL = "browser-approvals-card-dismiss";
|
|
32129
|
+
const APPROVALS_CARD_DECIDE_CHANNEL = "browser-approvals-card-decide";
|
|
32130
|
+
const APPROVALS_CARD_DECISIONS = [
|
|
32131
|
+
"once",
|
|
32132
|
+
"session",
|
|
32133
|
+
"site",
|
|
32134
|
+
"domain",
|
|
32135
|
+
"deny"
|
|
32136
|
+
];
|
|
32137
|
+
function isApprovalsCardDecision(value) {
|
|
32138
|
+
return typeof value === "string" && APPROVALS_CARD_DECISIONS.includes(value);
|
|
32139
|
+
}
|
|
32140
|
+
const APPROVALS_CARD_MODEL_LIMITS = {
|
|
32141
|
+
entryId: 128,
|
|
32142
|
+
origin: 2048,
|
|
32143
|
+
requester: 256,
|
|
32144
|
+
pending: 20,
|
|
32145
|
+
totalBytes: 32 * 1024
|
|
32146
|
+
};
|
|
32057
32147
|
const APPROVALS_CARD_MAX_WIDTH = 352;
|
|
32058
32148
|
const APPROVALS_CARD_MAX_HEIGHT = 480;
|
|
32059
32149
|
const APPROVALS_CARD_MIN_HEIGHT = 96;
|
|
@@ -32086,7 +32176,7 @@ function approvalsCardBoundsFor(input) {
|
|
|
32086
32176
|
);
|
|
32087
32177
|
const viewWidth = width + 2 * pad;
|
|
32088
32178
|
const viewHeight = height + 2 * pad;
|
|
32089
|
-
const viewX = integer(content.x + content.width - inset
|
|
32179
|
+
const viewX = input.dir === "rtl" ? integer(content.x + inset - pad) : integer(content.x + content.width - inset + pad - viewWidth);
|
|
32090
32180
|
const viewY = integer(content.y + content.height - inset - height - pad);
|
|
32091
32181
|
const view = {
|
|
32092
32182
|
x: viewX,
|
|
@@ -32110,6 +32200,153 @@ function approvalsCardBoundsFor(input) {
|
|
|
32110
32200
|
pad
|
|
32111
32201
|
};
|
|
32112
32202
|
}
|
|
32203
|
+
function text(value, max) {
|
|
32204
|
+
if (typeof value !== "string") return "";
|
|
32205
|
+
let cleaned = "";
|
|
32206
|
+
for (const character of value) {
|
|
32207
|
+
const code = character.codePointAt(0) ?? 0;
|
|
32208
|
+
if (code <= 31 || code === 127) {
|
|
32209
|
+
cleaned += " ";
|
|
32210
|
+
} else if (code >= 8234 && code <= 8238) ;
|
|
32211
|
+
else if (code >= 8294 && code <= 8297) ;
|
|
32212
|
+
else {
|
|
32213
|
+
cleaned += character;
|
|
32214
|
+
}
|
|
32215
|
+
}
|
|
32216
|
+
cleaned = cleaned.trim();
|
|
32217
|
+
return cleaned.length > max ? cleaned.slice(0, max) : cleaned;
|
|
32218
|
+
}
|
|
32219
|
+
function httpOrigin(value) {
|
|
32220
|
+
const origin = text(value, APPROVALS_CARD_MODEL_LIMITS.origin);
|
|
32221
|
+
try {
|
|
32222
|
+
const url = new URL(origin);
|
|
32223
|
+
if (url.protocol !== "http:" && url.protocol !== "https:") return null;
|
|
32224
|
+
return url.origin;
|
|
32225
|
+
} catch {
|
|
32226
|
+
return null;
|
|
32227
|
+
}
|
|
32228
|
+
}
|
|
32229
|
+
function sanitizeCardRequest(entry) {
|
|
32230
|
+
const entryId = text(entry.entryId, APPROVALS_CARD_MODEL_LIMITS.entryId);
|
|
32231
|
+
const origin = httpOrigin(entry.origin);
|
|
32232
|
+
if (!entryId || !origin) return null;
|
|
32233
|
+
const expiresAt = typeof entry.expiresAt === "number" && Number.isFinite(entry.expiresAt) ? entry.expiresAt : 0;
|
|
32234
|
+
const broadKey = text(entry.broadKey, 253);
|
|
32235
|
+
return {
|
|
32236
|
+
entryId,
|
|
32237
|
+
origin,
|
|
32238
|
+
requester: text(entry.requester, APPROVALS_CARD_MODEL_LIMITS.requester),
|
|
32239
|
+
expiresAt,
|
|
32240
|
+
...broadKey ? { broadKey } : {}
|
|
32241
|
+
};
|
|
32242
|
+
}
|
|
32243
|
+
function approvalsCardRequestFrom(entry, labels = {}) {
|
|
32244
|
+
const broad = entry.broad && typeof entry.broad === "object" ? entry.broad : null;
|
|
32245
|
+
const sessionId2 = typeof entry.requesterSessionId === "string" ? entry.requesterSessionId : "";
|
|
32246
|
+
return sanitizeCardRequest({
|
|
32247
|
+
entryId: entry.entryId,
|
|
32248
|
+
origin: entry.origin,
|
|
32249
|
+
requester: sessionId2 ? labels[sessionId2] : "",
|
|
32250
|
+
expiresAt: entry.expiresAt,
|
|
32251
|
+
broadKey: broad?.key
|
|
32252
|
+
});
|
|
32253
|
+
}
|
|
32254
|
+
function modelDirection(value) {
|
|
32255
|
+
return value === "rtl" ? "rtl" : "ltr";
|
|
32256
|
+
}
|
|
32257
|
+
function approvalsCardModelFrom(input) {
|
|
32258
|
+
const pending = [];
|
|
32259
|
+
for (const entry of input.entries) {
|
|
32260
|
+
if (pending.length >= APPROVALS_CARD_MODEL_LIMITS.pending) break;
|
|
32261
|
+
const request2 = approvalsCardRequestFrom(entry, input.requesterLabels);
|
|
32262
|
+
if (request2) pending.push(request2);
|
|
32263
|
+
}
|
|
32264
|
+
const request = pending.find((entry) => !input.dismissed?.has(entry.entryId)) ?? null;
|
|
32265
|
+
const model = {
|
|
32266
|
+
v: 1,
|
|
32267
|
+
seq: Number.isInteger(input.seq) && input.seq >= 0 ? input.seq : 0,
|
|
32268
|
+
locale: text(input.locale, 35) || "en",
|
|
32269
|
+
dir: modelDirection(input.dir),
|
|
32270
|
+
theme: input.theme === "light" ? "light" : "dark",
|
|
32271
|
+
palette: paletteName(input.palette),
|
|
32272
|
+
view: input.view === "list" ? "list" : "request",
|
|
32273
|
+
focus: input.focus === true,
|
|
32274
|
+
count: pending.length,
|
|
32275
|
+
busy: input.busy === true,
|
|
32276
|
+
request,
|
|
32277
|
+
pending,
|
|
32278
|
+
error: input.error === "stale" || input.error === "unavailable" ? input.error : null
|
|
32279
|
+
};
|
|
32280
|
+
return sanitizeApprovalsCardModel(model) ?? emptyModel(model);
|
|
32281
|
+
}
|
|
32282
|
+
function paletteName(value) {
|
|
32283
|
+
if (typeof value !== "string") return null;
|
|
32284
|
+
return /^[A-Za-z0-9_-]{1,40}$/.test(value) ? value : null;
|
|
32285
|
+
}
|
|
32286
|
+
function emptyModel(fallback) {
|
|
32287
|
+
return {
|
|
32288
|
+
...fallback,
|
|
32289
|
+
request: null,
|
|
32290
|
+
pending: [],
|
|
32291
|
+
count: 0,
|
|
32292
|
+
busy: false,
|
|
32293
|
+
error: "unavailable"
|
|
32294
|
+
};
|
|
32295
|
+
}
|
|
32296
|
+
function sanitizeApprovalsCardModel(raw) {
|
|
32297
|
+
if (!raw || typeof raw !== "object") return null;
|
|
32298
|
+
const input = raw;
|
|
32299
|
+
const seq2 = input.seq;
|
|
32300
|
+
if (typeof seq2 !== "number" || !Number.isInteger(seq2) || seq2 < 0) return null;
|
|
32301
|
+
const pendingRaw = Array.isArray(input.pending) ? input.pending : [];
|
|
32302
|
+
const pending = [];
|
|
32303
|
+
for (const entry of pendingRaw) {
|
|
32304
|
+
if (pending.length >= APPROVALS_CARD_MODEL_LIMITS.pending) break;
|
|
32305
|
+
const request2 = sanitizeCardRequest(
|
|
32306
|
+
entry ?? {}
|
|
32307
|
+
);
|
|
32308
|
+
if (request2) pending.push(request2);
|
|
32309
|
+
}
|
|
32310
|
+
const requestRaw = input.request && typeof input.request === "object" ? sanitizeCardRequest(
|
|
32311
|
+
input.request
|
|
32312
|
+
) : null;
|
|
32313
|
+
const request = requestRaw ?? null;
|
|
32314
|
+
const model = {
|
|
32315
|
+
v: 1,
|
|
32316
|
+
seq: seq2,
|
|
32317
|
+
locale: text(input.locale, 35) || "en",
|
|
32318
|
+
dir: modelDirection(input.dir),
|
|
32319
|
+
theme: input.theme === "light" ? "light" : "dark",
|
|
32320
|
+
palette: paletteName(input.palette),
|
|
32321
|
+
view: input.view === "list" ? "list" : "request",
|
|
32322
|
+
focus: input.focus === true,
|
|
32323
|
+
count: pending.length,
|
|
32324
|
+
busy: input.busy === true,
|
|
32325
|
+
request,
|
|
32326
|
+
pending,
|
|
32327
|
+
error: input.error === "stale" || input.error === "unavailable" ? input.error : null
|
|
32328
|
+
};
|
|
32329
|
+
while (model.pending.length > 0 && Buffer.byteLength(JSON.stringify(model), "utf8") > APPROVALS_CARD_MODEL_LIMITS.totalBytes) {
|
|
32330
|
+
model.pending.pop();
|
|
32331
|
+
model.count = model.pending.length;
|
|
32332
|
+
}
|
|
32333
|
+
if (Buffer.byteLength(JSON.stringify(model), "utf8") > APPROVALS_CARD_MODEL_LIMITS.totalBytes) {
|
|
32334
|
+
return null;
|
|
32335
|
+
}
|
|
32336
|
+
return model;
|
|
32337
|
+
}
|
|
32338
|
+
function sanitizeRequesterLabels(input) {
|
|
32339
|
+
const labels = {};
|
|
32340
|
+
for (const [key, value] of Object.entries(input)) {
|
|
32341
|
+
if (Object.keys(labels).length >= 64) break;
|
|
32342
|
+
if (typeof key !== "string" || key.length === 0 || key.length > 128) {
|
|
32343
|
+
continue;
|
|
32344
|
+
}
|
|
32345
|
+
if (typeof value !== "string" || value.trim() === "") continue;
|
|
32346
|
+
labels[key] = value.trim().slice(0, 256);
|
|
32347
|
+
}
|
|
32348
|
+
return labels;
|
|
32349
|
+
}
|
|
32113
32350
|
const APPROVALS_OVERLAY_S6A_ENV = "LOCAL_OPERATOR_UI_BROWSER_APPROVALS_OVERLAY_S6A";
|
|
32114
32351
|
const TRANSPARENT = "#00000000";
|
|
32115
32352
|
const OPAQUE = "#1b1f24";
|
|
@@ -32137,11 +32374,35 @@ function approvalsDocumentUrl(documentUrl, count, theme, opaque) {
|
|
|
32137
32374
|
class ApprovalsOverlayController {
|
|
32138
32375
|
window;
|
|
32139
32376
|
documentUrl;
|
|
32377
|
+
preloadPath;
|
|
32140
32378
|
opaque;
|
|
32141
|
-
|
|
32379
|
+
respond;
|
|
32380
|
+
pageWebContents;
|
|
32381
|
+
focusTarget;
|
|
32382
|
+
onChanged;
|
|
32142
32383
|
log;
|
|
32384
|
+
onDismissAction;
|
|
32385
|
+
onDecideAction;
|
|
32143
32386
|
view;
|
|
32144
32387
|
childListeners;
|
|
32388
|
+
model;
|
|
32389
|
+
/**
|
|
32390
|
+
* THE RAW QUEUE, not the painted pending list. A rebuild after a dismissal or
|
|
32391
|
+
* a context change must still know each entry's session id and broad grant;
|
|
32392
|
+
* rebuilding from `model.pending` lost both (round-2 F2).
|
|
32393
|
+
*/
|
|
32394
|
+
entries;
|
|
32395
|
+
modelSeq;
|
|
32396
|
+
dismissed;
|
|
32397
|
+
requesterLabels;
|
|
32398
|
+
palette;
|
|
32399
|
+
actionError;
|
|
32400
|
+
explicitOpen;
|
|
32401
|
+
pendingFocus;
|
|
32402
|
+
locale;
|
|
32403
|
+
dir;
|
|
32404
|
+
theme;
|
|
32405
|
+
actionCounts;
|
|
32145
32406
|
pending;
|
|
32146
32407
|
ready;
|
|
32147
32408
|
visible;
|
|
@@ -32153,12 +32414,29 @@ class ApprovalsOverlayController {
|
|
|
32153
32414
|
constructor(deps) {
|
|
32154
32415
|
this.window = deps.window;
|
|
32155
32416
|
this.documentUrl = deps.documentUrl;
|
|
32417
|
+
this.preloadPath = deps.preloadPath ?? null;
|
|
32156
32418
|
this.opaque = deps.opaque === true;
|
|
32157
|
-
this.
|
|
32419
|
+
this.respond = deps.respond ?? null;
|
|
32420
|
+
this.pageWebContents = deps.pageWebContents ?? null;
|
|
32421
|
+
this.focusTarget = deps.focusTarget ?? null;
|
|
32422
|
+
this.onChanged = deps.onChanged ?? null;
|
|
32158
32423
|
this.log = deps.log ?? (() => {
|
|
32159
32424
|
});
|
|
32160
32425
|
this.view = null;
|
|
32161
32426
|
this.childListeners = [];
|
|
32427
|
+
this.model = null;
|
|
32428
|
+
this.entries = [];
|
|
32429
|
+
this.modelSeq = 0;
|
|
32430
|
+
this.dismissed = /* @__PURE__ */ new Set();
|
|
32431
|
+
this.requesterLabels = { ...deps.requesterLabels ?? {} };
|
|
32432
|
+
this.palette = deps.palette ?? null;
|
|
32433
|
+
this.actionError = null;
|
|
32434
|
+
this.explicitOpen = false;
|
|
32435
|
+
this.pendingFocus = false;
|
|
32436
|
+
this.locale = deps.locale ?? "en";
|
|
32437
|
+
this.dir = deps.dir === "rtl" ? "rtl" : "ltr";
|
|
32438
|
+
this.theme = deps.theme === "light" ? "light" : "dark";
|
|
32439
|
+
this.actionCounts = { dismissed: 0, decided: 0, dropped: 0 };
|
|
32162
32440
|
this.pending = 0;
|
|
32163
32441
|
this.ready = false;
|
|
32164
32442
|
this.visible = false;
|
|
@@ -32171,18 +32449,191 @@ class ApprovalsOverlayController {
|
|
|
32171
32449
|
revision: 0
|
|
32172
32450
|
};
|
|
32173
32451
|
this.bounds = null;
|
|
32452
|
+
this.onDismissAction = (event, payload) => {
|
|
32453
|
+
if (!this.acceptAction(event, payload)) return;
|
|
32454
|
+
const action = payload;
|
|
32455
|
+
if (!this.isPendingEntry(action.entryId)) {
|
|
32456
|
+
this.dropAction();
|
|
32457
|
+
return;
|
|
32458
|
+
}
|
|
32459
|
+
this.actionCounts.dismissed += 1;
|
|
32460
|
+
this.dismissEntry(action.entryId);
|
|
32461
|
+
};
|
|
32462
|
+
this.onDecideAction = (event, payload) => {
|
|
32463
|
+
if (!this.acceptAction(event, payload)) return;
|
|
32464
|
+
const action = payload;
|
|
32465
|
+
if (!this.isPendingEntry(action.entryId) || !isApprovalsCardDecision(action.decision)) {
|
|
32466
|
+
this.dropAction();
|
|
32467
|
+
return;
|
|
32468
|
+
}
|
|
32469
|
+
this.actionCounts.decided += 1;
|
|
32470
|
+
this.decide(action.entryId, action.decision);
|
|
32471
|
+
};
|
|
32472
|
+
electron.ipcMain.on(APPROVALS_CARD_DISMISS_CHANNEL, this.onDismissAction);
|
|
32473
|
+
electron.ipcMain.on(APPROVALS_CARD_DECIDE_CHANNEL, this.onDecideAction);
|
|
32174
32474
|
this.ensureChild();
|
|
32175
32475
|
}
|
|
32176
|
-
/**
|
|
32177
|
-
|
|
32476
|
+
/**
|
|
32477
|
+
* Replace the card's model from the host's live queue.
|
|
32478
|
+
*
|
|
32479
|
+
* This is the AUTO-PRESENT path: a non-empty queue shows the card without a
|
|
32480
|
+
* focus call, a focus event or a bounds change to the page. Only `open()`
|
|
32481
|
+
* (an explicit shield click) may focus it.
|
|
32482
|
+
*/
|
|
32483
|
+
setModel(input) {
|
|
32178
32484
|
if (this.disposed) return;
|
|
32179
|
-
|
|
32180
|
-
|
|
32485
|
+
if (typeof input.locale === "string" && input.locale.trim() !== "") {
|
|
32486
|
+
this.locale = input.locale.trim().slice(0, 35);
|
|
32487
|
+
}
|
|
32488
|
+
if (input.dir === "ltr" || input.dir === "rtl") this.dir = input.dir;
|
|
32489
|
+
if (input.theme === "light" || input.theme === "dark") {
|
|
32490
|
+
this.theme = input.theme;
|
|
32491
|
+
}
|
|
32492
|
+
if ("palette" in input) this.palette = input.palette ?? null;
|
|
32493
|
+
if (input.requesterLabels) {
|
|
32494
|
+
this.requesterLabels = { ...input.requesterLabels };
|
|
32495
|
+
}
|
|
32496
|
+
this.entries = input.entries;
|
|
32497
|
+
this.actionError = null;
|
|
32498
|
+
const model = approvalsCardModelFrom({
|
|
32499
|
+
seq: ++this.modelSeq,
|
|
32500
|
+
entries: this.entries,
|
|
32501
|
+
locale: this.locale,
|
|
32502
|
+
dir: this.dir,
|
|
32503
|
+
theme: this.theme,
|
|
32504
|
+
palette: this.palette,
|
|
32505
|
+
requesterLabels: this.requesterLabels,
|
|
32506
|
+
view: this.model?.view ?? "request",
|
|
32507
|
+
focus: false,
|
|
32508
|
+
busy: input.busy === true,
|
|
32509
|
+
error: input.error ?? null,
|
|
32510
|
+
dismissed: this.dismissed
|
|
32511
|
+
});
|
|
32512
|
+
this.model = model;
|
|
32513
|
+
this.pending = model.count;
|
|
32514
|
+
for (const id2 of this.dismissed) {
|
|
32515
|
+
if (!model.pending.some((entry) => entry.entryId === id2)) {
|
|
32516
|
+
this.dismissed.delete(id2);
|
|
32517
|
+
}
|
|
32518
|
+
}
|
|
32519
|
+
this.pushModel(false);
|
|
32520
|
+
if (!model.request) {
|
|
32521
|
+
this.explicitOpen = false;
|
|
32522
|
+
this.pendingFocus = false;
|
|
32181
32523
|
this.hide();
|
|
32524
|
+
this.onChanged?.();
|
|
32182
32525
|
return;
|
|
32183
32526
|
}
|
|
32184
|
-
this.updateCount();
|
|
32185
32527
|
this.maybeShow();
|
|
32528
|
+
if (this.ready) this.measureAndShow();
|
|
32529
|
+
}
|
|
32530
|
+
/**
|
|
32531
|
+
* Explicit open (the shield). Focus is handed to the card only when the host
|
|
32532
|
+
* supplied `focusTarget`; an inactive/headless run still opens the card but
|
|
32533
|
+
* takes nothing.
|
|
32534
|
+
*/
|
|
32535
|
+
open(input = {}) {
|
|
32536
|
+
if (this.disposed) return;
|
|
32537
|
+
if (typeof input.locale === "string" && input.locale.trim() !== "") {
|
|
32538
|
+
this.locale = input.locale.trim().slice(0, 35);
|
|
32539
|
+
}
|
|
32540
|
+
if (input.dir === "ltr" || input.dir === "rtl") this.dir = input.dir;
|
|
32541
|
+
if (input.theme === "light" || input.theme === "dark") {
|
|
32542
|
+
this.theme = input.theme;
|
|
32543
|
+
}
|
|
32544
|
+
if ("palette" in input) this.palette = input.palette ?? null;
|
|
32545
|
+
if (input.requesterLabels) {
|
|
32546
|
+
this.requesterLabels = { ...input.requesterLabels };
|
|
32547
|
+
}
|
|
32548
|
+
if (!this.model || this.model.count === 0) return;
|
|
32549
|
+
if (!this.model.request) {
|
|
32550
|
+
this.dismissed.clear();
|
|
32551
|
+
this.model = approvalsCardModelFrom({
|
|
32552
|
+
seq: ++this.modelSeq,
|
|
32553
|
+
entries: this.entries,
|
|
32554
|
+
locale: this.locale,
|
|
32555
|
+
dir: this.dir,
|
|
32556
|
+
theme: this.theme,
|
|
32557
|
+
palette: this.palette,
|
|
32558
|
+
requesterLabels: this.requesterLabels,
|
|
32559
|
+
view: "request",
|
|
32560
|
+
focus: false,
|
|
32561
|
+
busy: false,
|
|
32562
|
+
error: null,
|
|
32563
|
+
dismissed: this.dismissed
|
|
32564
|
+
});
|
|
32565
|
+
this.pending = this.model.count;
|
|
32566
|
+
}
|
|
32567
|
+
this.explicitOpen = true;
|
|
32568
|
+
this.pendingFocus = input.focus !== false;
|
|
32569
|
+
this.pushModel(false);
|
|
32570
|
+
this.onChanged?.();
|
|
32571
|
+
this.maybeShow();
|
|
32572
|
+
if (this.ready) this.measureAndShow();
|
|
32573
|
+
this.focusIfPending();
|
|
32574
|
+
}
|
|
32575
|
+
/**
|
|
32576
|
+
* Update the app context the card renders in. The renderer pushes this on
|
|
32577
|
+
* mount and on every locale/theme change; without it an auto-presented card
|
|
32578
|
+
* stays in `en` until the first explicit open (U5).
|
|
32579
|
+
*/
|
|
32580
|
+
setContext(input) {
|
|
32581
|
+
if (this.disposed) return;
|
|
32582
|
+
let changed = false;
|
|
32583
|
+
if (typeof input.locale === "string" && input.locale.trim() !== "" && input.locale.trim().slice(0, 35) !== this.locale) {
|
|
32584
|
+
this.locale = input.locale.trim().slice(0, 35);
|
|
32585
|
+
changed = true;
|
|
32586
|
+
}
|
|
32587
|
+
if ((input.dir === "ltr" || input.dir === "rtl") && input.dir !== this.dir) {
|
|
32588
|
+
this.dir = input.dir;
|
|
32589
|
+
changed = true;
|
|
32590
|
+
}
|
|
32591
|
+
if ((input.theme === "light" || input.theme === "dark") && input.theme !== this.theme) {
|
|
32592
|
+
this.theme = input.theme;
|
|
32593
|
+
changed = true;
|
|
32594
|
+
}
|
|
32595
|
+
if ("palette" in input && (input.palette ?? null) !== this.palette) {
|
|
32596
|
+
this.palette = input.palette ?? null;
|
|
32597
|
+
changed = true;
|
|
32598
|
+
}
|
|
32599
|
+
if (input.requesterLabels) {
|
|
32600
|
+
const labels = sanitizeRequesterLabels(input.requesterLabels);
|
|
32601
|
+
if (JSON.stringify(labels) !== JSON.stringify(this.requesterLabels)) {
|
|
32602
|
+
this.requesterLabels = labels;
|
|
32603
|
+
changed = true;
|
|
32604
|
+
}
|
|
32605
|
+
}
|
|
32606
|
+
if (!changed) return;
|
|
32607
|
+
if (this.model) {
|
|
32608
|
+
this.model = approvalsCardModelFrom({
|
|
32609
|
+
seq: ++this.modelSeq,
|
|
32610
|
+
entries: this.entries,
|
|
32611
|
+
locale: this.locale,
|
|
32612
|
+
dir: this.dir,
|
|
32613
|
+
theme: this.theme,
|
|
32614
|
+
palette: this.palette,
|
|
32615
|
+
requesterLabels: this.requesterLabels,
|
|
32616
|
+
view: this.model.view,
|
|
32617
|
+
focus: false,
|
|
32618
|
+
busy: this.model.busy,
|
|
32619
|
+
error: this.actionError,
|
|
32620
|
+
dismissed: this.dismissed
|
|
32621
|
+
});
|
|
32622
|
+
}
|
|
32623
|
+
this.pushModel(false);
|
|
32624
|
+
if (this.layout.presented) this.maybeShow();
|
|
32625
|
+
if (this.ready) this.measureAndShow();
|
|
32626
|
+
}
|
|
32627
|
+
/** Close without deciding (Close, Escape, or the shield's second click). */
|
|
32628
|
+
close(reason = "close") {
|
|
32629
|
+
if (this.disposed) return;
|
|
32630
|
+
this.actionError = null;
|
|
32631
|
+
this.explicitOpen = false;
|
|
32632
|
+
this.pendingFocus = false;
|
|
32633
|
+
this.hide();
|
|
32634
|
+
this.returnFocus();
|
|
32635
|
+
this.onChanged?.();
|
|
32636
|
+
this.log(`[browser] approvals card closed: ${reason}`);
|
|
32186
32637
|
}
|
|
32187
32638
|
/** The registry's copied layout snapshot, after every page layout pass. */
|
|
32188
32639
|
onLayout(snapshot2) {
|
|
@@ -32193,10 +32644,12 @@ class ApprovalsOverlayController {
|
|
|
32193
32644
|
revision: snapshot2.revision
|
|
32194
32645
|
};
|
|
32195
32646
|
if (!snapshot2.presented || !snapshot2.contentRect) {
|
|
32647
|
+
this.explicitOpen = false;
|
|
32648
|
+
this.pendingFocus = false;
|
|
32196
32649
|
this.hide();
|
|
32197
32650
|
return;
|
|
32198
32651
|
}
|
|
32199
|
-
if (this.
|
|
32652
|
+
if (this.model?.request) this.maybeShow();
|
|
32200
32653
|
}
|
|
32201
32654
|
facts() {
|
|
32202
32655
|
const view = this.view;
|
|
@@ -32210,6 +32663,10 @@ class ApprovalsOverlayController {
|
|
|
32210
32663
|
}
|
|
32211
32664
|
return {
|
|
32212
32665
|
pending: this.pending,
|
|
32666
|
+
requestEntryId: this.model?.request?.entryId ?? null,
|
|
32667
|
+
seq: this.model?.seq ?? 0,
|
|
32668
|
+
explicitOpen: this.explicitOpen,
|
|
32669
|
+
actions: { ...this.actionCounts },
|
|
32213
32670
|
presented: this.layout.presented,
|
|
32214
32671
|
contentRect: this.layout.contentRect,
|
|
32215
32672
|
ready: this.ready,
|
|
@@ -32224,13 +32681,165 @@ class ApprovalsOverlayController {
|
|
|
32224
32681
|
opaque: this.opaque
|
|
32225
32682
|
};
|
|
32226
32683
|
}
|
|
32684
|
+
/** The chrome projection's view of the card. */
|
|
32685
|
+
state() {
|
|
32686
|
+
return {
|
|
32687
|
+
available: !this.disposed && this.failedReason === null,
|
|
32688
|
+
// The shield button is a TOGGLE for the surface it opens, not a mirror of
|
|
32689
|
+
// auto-present: `visible` is true whenever a request arrived and the card
|
|
32690
|
+
// painted itself, and using that as `open` made the first shield click a
|
|
32691
|
+
// close and a later one a no-op (M1/U1).
|
|
32692
|
+
open: this.explicitOpen,
|
|
32693
|
+
visible: this.visible
|
|
32694
|
+
};
|
|
32695
|
+
}
|
|
32227
32696
|
dispose(reason = "dispose") {
|
|
32228
32697
|
if (this.disposed) return;
|
|
32229
32698
|
this.disposed = true;
|
|
32230
32699
|
this.visible = false;
|
|
32231
32700
|
this.ready = false;
|
|
32701
|
+
electron.ipcMain.removeListener(
|
|
32702
|
+
APPROVALS_CARD_DISMISS_CHANNEL,
|
|
32703
|
+
this.onDismissAction
|
|
32704
|
+
);
|
|
32705
|
+
electron.ipcMain.removeListener(APPROVALS_CARD_DECIDE_CHANNEL, this.onDecideAction);
|
|
32232
32706
|
this.releaseView(reason);
|
|
32233
32707
|
}
|
|
32708
|
+
/**
|
|
32709
|
+
* The sender pin, in one place. The card is trusted only when the event comes
|
|
32710
|
+
* from THIS child's main frame and that frame is still the card document: no
|
|
32711
|
+
* other renderer, no same-origin iframe, and no navigation away can act.
|
|
32712
|
+
*/
|
|
32713
|
+
acceptAction(event, payload) {
|
|
32714
|
+
const view = this.view;
|
|
32715
|
+
if (!view || view.webContents.isDestroyed()) return false;
|
|
32716
|
+
if (event.sender !== view.webContents) {
|
|
32717
|
+
this.dropAction();
|
|
32718
|
+
return false;
|
|
32719
|
+
}
|
|
32720
|
+
if (!event.senderFrame || event.senderFrame !== view.webContents.mainFrame) {
|
|
32721
|
+
this.dropAction();
|
|
32722
|
+
return false;
|
|
32723
|
+
}
|
|
32724
|
+
if (!this.sameDocument(event.senderFrame.url)) {
|
|
32725
|
+
this.dropAction();
|
|
32726
|
+
return false;
|
|
32727
|
+
}
|
|
32728
|
+
const seq2 = payload && typeof payload === "object" ? payload.seq : void 0;
|
|
32729
|
+
if (typeof seq2 !== "number" || !Number.isInteger(seq2) || seq2 !== this.model?.seq) {
|
|
32730
|
+
this.dropAction();
|
|
32731
|
+
return false;
|
|
32732
|
+
}
|
|
32733
|
+
return true;
|
|
32734
|
+
}
|
|
32735
|
+
isPendingEntry(entryId) {
|
|
32736
|
+
return typeof entryId === "string" && Boolean(this.model?.pending.some((entry) => entry.entryId === entryId));
|
|
32737
|
+
}
|
|
32738
|
+
sameDocument(url) {
|
|
32739
|
+
const strip = (value) => value.split("?")[0].split("#")[0];
|
|
32740
|
+
try {
|
|
32741
|
+
return strip(new URL(url).toString()) === strip(new URL(this.documentUrl).toString());
|
|
32742
|
+
} catch {
|
|
32743
|
+
return false;
|
|
32744
|
+
}
|
|
32745
|
+
}
|
|
32746
|
+
dropAction() {
|
|
32747
|
+
this.actionCounts.dropped += 1;
|
|
32748
|
+
this.actionError = "stale";
|
|
32749
|
+
if (this.model) {
|
|
32750
|
+
this.model = approvalsCardModelFrom({
|
|
32751
|
+
seq: ++this.modelSeq,
|
|
32752
|
+
entries: this.entries,
|
|
32753
|
+
locale: this.locale,
|
|
32754
|
+
dir: this.dir,
|
|
32755
|
+
theme: this.theme,
|
|
32756
|
+
palette: this.palette,
|
|
32757
|
+
requesterLabels: this.requesterLabels,
|
|
32758
|
+
view: this.model.view,
|
|
32759
|
+
focus: false,
|
|
32760
|
+
busy: this.model.busy,
|
|
32761
|
+
error: this.actionError,
|
|
32762
|
+
dismissed: this.dismissed
|
|
32763
|
+
});
|
|
32764
|
+
this.pushModel(false);
|
|
32765
|
+
}
|
|
32766
|
+
}
|
|
32767
|
+
/** Close the card's current entry without deciding it. */
|
|
32768
|
+
dismissEntry(entryId) {
|
|
32769
|
+
this.dismissed.add(entryId);
|
|
32770
|
+
this.actionError = null;
|
|
32771
|
+
if (!this.model) return;
|
|
32772
|
+
const model = approvalsCardModelFrom({
|
|
32773
|
+
seq: ++this.modelSeq,
|
|
32774
|
+
entries: this.entries,
|
|
32775
|
+
locale: this.locale,
|
|
32776
|
+
dir: this.dir,
|
|
32777
|
+
theme: this.theme,
|
|
32778
|
+
palette: this.palette,
|
|
32779
|
+
requesterLabels: this.requesterLabels,
|
|
32780
|
+
view: this.model.view,
|
|
32781
|
+
focus: false,
|
|
32782
|
+
busy: false,
|
|
32783
|
+
error: null,
|
|
32784
|
+
dismissed: this.dismissed
|
|
32785
|
+
});
|
|
32786
|
+
this.model = model;
|
|
32787
|
+
this.pending = model.count;
|
|
32788
|
+
this.pushModel(false);
|
|
32789
|
+
if (!model.request) {
|
|
32790
|
+
this.explicitOpen = false;
|
|
32791
|
+
this.pendingFocus = false;
|
|
32792
|
+
this.hide();
|
|
32793
|
+
} else {
|
|
32794
|
+
this.maybeShow();
|
|
32795
|
+
}
|
|
32796
|
+
this.returnFocus();
|
|
32797
|
+
this.onChanged?.();
|
|
32798
|
+
}
|
|
32799
|
+
/**
|
|
32800
|
+
* Answer one entry. The decision's MEANING is never taken from the card: it
|
|
32801
|
+
* is the host's `respondToConsent`, which re-resolves the id against the live
|
|
32802
|
+
* queue. A rejection is an inline error, never a success.
|
|
32803
|
+
*/
|
|
32804
|
+
decide(entryId, decision) {
|
|
32805
|
+
if (!this.respond) {
|
|
32806
|
+
this.showActionError();
|
|
32807
|
+
return;
|
|
32808
|
+
}
|
|
32809
|
+
try {
|
|
32810
|
+
const result = this.respond(entryId, decision);
|
|
32811
|
+
if (result && typeof result.then === "function") {
|
|
32812
|
+
void result.catch(() => this.showActionError());
|
|
32813
|
+
}
|
|
32814
|
+
} catch {
|
|
32815
|
+
this.showActionError();
|
|
32816
|
+
return;
|
|
32817
|
+
}
|
|
32818
|
+
this.returnFocus();
|
|
32819
|
+
}
|
|
32820
|
+
showActionError() {
|
|
32821
|
+
if (!this.model) return;
|
|
32822
|
+
this.model = { ...this.model, error: "unavailable", busy: false };
|
|
32823
|
+
this.pushModel(false);
|
|
32824
|
+
}
|
|
32825
|
+
/** Focus the card, only through the host's gated helper. */
|
|
32826
|
+
focusIfPending() {
|
|
32827
|
+
if (!this.pendingFocus || !this.explicitOpen || !this.ready || !this.visible) {
|
|
32828
|
+
return;
|
|
32829
|
+
}
|
|
32830
|
+
const view = this.view;
|
|
32831
|
+
if (!view || view.webContents.isDestroyed()) return;
|
|
32832
|
+
this.pendingFocus = false;
|
|
32833
|
+
this.focusTarget?.(view.webContents);
|
|
32834
|
+
this.pushModel(true);
|
|
32835
|
+
}
|
|
32836
|
+
/** Return the keyboard to the page (close/dismiss/decision). */
|
|
32837
|
+
returnFocus() {
|
|
32838
|
+
this.pendingFocus = false;
|
|
32839
|
+
const page = this.pageWebContents?.();
|
|
32840
|
+
if (!page || page.isDestroyed()) return;
|
|
32841
|
+
this.focusTarget?.(page);
|
|
32842
|
+
}
|
|
32234
32843
|
ensureChild() {
|
|
32235
32844
|
if (this.view || this.failedReason !== null || this.disposed) return;
|
|
32236
32845
|
this.createChild();
|
|
@@ -32250,7 +32859,8 @@ class ApprovalsOverlayController {
|
|
|
32250
32859
|
const bounds = approvalsCardBoundsFor({
|
|
32251
32860
|
contentRect: this.layout.contentRect,
|
|
32252
32861
|
naturalHeight: this.naturalHeight,
|
|
32253
|
-
opaque: this.opaque
|
|
32862
|
+
opaque: this.opaque,
|
|
32863
|
+
dir: this.dir
|
|
32254
32864
|
});
|
|
32255
32865
|
this.bounds = bounds;
|
|
32256
32866
|
if (!bounds) {
|
|
@@ -32259,7 +32869,7 @@ class ApprovalsOverlayController {
|
|
|
32259
32869
|
}
|
|
32260
32870
|
try {
|
|
32261
32871
|
const current = view.getBounds();
|
|
32262
|
-
if (current.width !== bounds.view.width
|
|
32872
|
+
if (current.width !== bounds.view.width) {
|
|
32263
32873
|
this.rebuildAt(bounds);
|
|
32264
32874
|
return;
|
|
32265
32875
|
}
|
|
@@ -32321,8 +32931,9 @@ class ApprovalsOverlayController {
|
|
|
32321
32931
|
nodeIntegration: false,
|
|
32322
32932
|
webSecurity: true,
|
|
32323
32933
|
allowRunningInsecureContent: false,
|
|
32324
|
-
//
|
|
32325
|
-
//
|
|
32934
|
+
// S6b's bridge: the two card verbs only. S6a's probe passes no
|
|
32935
|
+
// preload, so the inert document remains exactly as reviewed.
|
|
32936
|
+
...this.preloadPath ? { preload: this.preloadPath } : {},
|
|
32326
32937
|
javascript: true,
|
|
32327
32938
|
backgroundThrottling: false
|
|
32328
32939
|
}
|
|
@@ -32389,13 +33000,17 @@ class ApprovalsOverlayController {
|
|
|
32389
33000
|
measureAndShow() {
|
|
32390
33001
|
const view = this.view;
|
|
32391
33002
|
if (!view || view.webContents.isDestroyed()) return;
|
|
33003
|
+
const payload = this.modelPayload(false);
|
|
33004
|
+
if (!payload) return;
|
|
32392
33005
|
if (view.getBounds().width <= 0) {
|
|
32393
|
-
|
|
33006
|
+
void view.webContents.executeJavaScript(`window.__approvalsCard?.setModel(${payload})`).catch(() => {
|
|
33007
|
+
});
|
|
32394
33008
|
this.maybeShow();
|
|
32395
33009
|
return;
|
|
32396
33010
|
}
|
|
32397
33011
|
const measured = view.webContents.executeJavaScript(
|
|
32398
33012
|
`new Promise((resolve) => {
|
|
33013
|
+
window.__approvalsCard?.setModel(${payload});
|
|
32399
33014
|
const read = () => {
|
|
32400
33015
|
const el = document.getElementById('approvals-card');
|
|
32401
33016
|
if (!el) { resolve(0); return; }
|
|
@@ -32411,8 +33026,16 @@ class ApprovalsOverlayController {
|
|
|
32411
33026
|
el.style.maxHeight = previous;
|
|
32412
33027
|
resolve(height);
|
|
32413
33028
|
};
|
|
32414
|
-
|
|
32415
|
-
|
|
33029
|
+
/*
|
|
33030
|
+
* A timer, not requestAnimationFrame: the probe's window is HIDDEN,
|
|
33031
|
+
* and an occluded window does not run animation frames, so an rAF
|
|
33032
|
+
* gate never fires and the measurement falls to the 1500ms zero.
|
|
33033
|
+
* setModel ran in this same task, so the next task reads the
|
|
33034
|
+
* painted model.
|
|
33035
|
+
*/
|
|
33036
|
+
const afterPaint = () => setTimeout(read, 0);
|
|
33037
|
+
if (document.readyState === 'complete') afterPaint();
|
|
33038
|
+
else addEventListener('load', afterPaint, { once: true });
|
|
32416
33039
|
})`
|
|
32417
33040
|
);
|
|
32418
33041
|
const timer = new Promise((resolve) => {
|
|
@@ -32424,19 +33047,39 @@ class ApprovalsOverlayController {
|
|
|
32424
33047
|
this.naturalHeight = height;
|
|
32425
33048
|
}
|
|
32426
33049
|
this.maybeShow();
|
|
33050
|
+
this.focusIfPending();
|
|
32427
33051
|
}).catch((error) => {
|
|
32428
33052
|
if (this.view !== view) return;
|
|
32429
33053
|
this.fail(`measure_failed:${String(error)}`);
|
|
32430
33054
|
});
|
|
32431
|
-
this.updateCount();
|
|
32432
33055
|
this.maybeShow();
|
|
32433
33056
|
}
|
|
32434
|
-
|
|
33057
|
+
/**
|
|
33058
|
+
* Push the model into the card document. S6a proved this seam for the count;
|
|
33059
|
+
* S6b sends the whole sanitized model through it, so no third channel exists
|
|
33060
|
+
* in the card direction. Every push carries the current `seq`; the document
|
|
33061
|
+
* echoes it on its next action.
|
|
33062
|
+
*/
|
|
33063
|
+
/** Serialize the next model, applying the controller's current context. */
|
|
33064
|
+
modelPayload(focus) {
|
|
33065
|
+
if (!this.model) return null;
|
|
33066
|
+
const model = {
|
|
33067
|
+
...this.model,
|
|
33068
|
+
locale: this.locale,
|
|
33069
|
+
dir: this.dir,
|
|
33070
|
+
theme: this.theme,
|
|
33071
|
+
palette: this.palette,
|
|
33072
|
+
focus: focus === true
|
|
33073
|
+
};
|
|
33074
|
+
this.model = model;
|
|
33075
|
+
if (focus) this.pendingFocus = false;
|
|
33076
|
+
return JSON.stringify(model);
|
|
33077
|
+
}
|
|
33078
|
+
pushModel(focus) {
|
|
32435
33079
|
const view = this.view;
|
|
32436
|
-
|
|
32437
|
-
|
|
32438
|
-
|
|
32439
|
-
).catch(() => {
|
|
33080
|
+
const payload = this.modelPayload(focus);
|
|
33081
|
+
if (!view || !payload || view.webContents.isDestroyed()) return;
|
|
33082
|
+
void view.webContents.executeJavaScript(`window.__approvalsCard?.setModel(${payload})`).catch(() => {
|
|
32440
33083
|
});
|
|
32441
33084
|
}
|
|
32442
33085
|
hide() {
|
|
@@ -32607,8 +33250,8 @@ function renderArg(arg) {
|
|
|
32607
33250
|
if (arg.subtype === "null") return "null";
|
|
32608
33251
|
return String(arg.type ?? "");
|
|
32609
33252
|
}
|
|
32610
|
-
function clip(
|
|
32611
|
-
return
|
|
33253
|
+
function clip(text2) {
|
|
33254
|
+
return text2.length > MAX_ARG_CHARS ? `${text2.slice(0, MAX_ARG_CHARS)}…` : text2;
|
|
32612
33255
|
}
|
|
32613
33256
|
function topFrame(stackTrace) {
|
|
32614
33257
|
const frames = stackTrace?.callFrames;
|
|
@@ -32623,11 +33266,11 @@ function routeDebuggerEvent(webContentsId, method, rawParams) {
|
|
|
32623
33266
|
const params = rawParams ?? {};
|
|
32624
33267
|
if (method === "Runtime.consoleAPICalled") {
|
|
32625
33268
|
const args = Array.isArray(params.args) ? params.args : [];
|
|
32626
|
-
const
|
|
33269
|
+
const text2 = clip(args.map(renderArg).join(" ").trim());
|
|
32627
33270
|
const frame = topFrame(params.stackTrace);
|
|
32628
33271
|
push(webContentsId, {
|
|
32629
33272
|
level: levelForConsole(params.type),
|
|
32630
|
-
text,
|
|
33273
|
+
text: text2,
|
|
32631
33274
|
source: "console",
|
|
32632
33275
|
url: frame.url,
|
|
32633
33276
|
line: frame.line,
|
|
@@ -32638,13 +33281,13 @@ function routeDebuggerEvent(webContentsId, method, rawParams) {
|
|
|
32638
33281
|
if (method === "Runtime.exceptionThrown") {
|
|
32639
33282
|
const details = params.exceptionDetails ?? {};
|
|
32640
33283
|
const exception = details.exception ?? {};
|
|
32641
|
-
const
|
|
33284
|
+
const text2 = clip(
|
|
32642
33285
|
typeof exception.description === "string" && exception.description ? exception.description : String(details.text ?? "uncaught exception")
|
|
32643
33286
|
);
|
|
32644
33287
|
const frame = topFrame(details.stackTrace);
|
|
32645
33288
|
push(webContentsId, {
|
|
32646
33289
|
level: "error",
|
|
32647
|
-
text,
|
|
33290
|
+
text: text2,
|
|
32648
33291
|
source: "exception",
|
|
32649
33292
|
url: frame.url || String(details.url ?? ""),
|
|
32650
33293
|
line: frame.line || Number(details.lineNumber ?? 0),
|
|
@@ -32654,11 +33297,11 @@ function routeDebuggerEvent(webContentsId, method, rawParams) {
|
|
|
32654
33297
|
}
|
|
32655
33298
|
if (method === "Log.entryAdded") {
|
|
32656
33299
|
const entry = params.entry ?? {};
|
|
32657
|
-
const
|
|
32658
|
-
if (!
|
|
33300
|
+
const text2 = clip(String(entry.text ?? ""));
|
|
33301
|
+
if (!text2) return;
|
|
32659
33302
|
push(webContentsId, {
|
|
32660
33303
|
level: levelForLogEntry(entry.level),
|
|
32661
|
-
text,
|
|
33304
|
+
text: text2,
|
|
32662
33305
|
source: "log-entry",
|
|
32663
33306
|
url: String(entry.url ?? ""),
|
|
32664
33307
|
line: Number(entry.lineNumber ?? 0),
|
|
@@ -36500,6 +37143,8 @@ const enUiChatComposer = {
|
|
|
36500
37143
|
"ui.chat.composer.starting_recording": "Starting recording",
|
|
36501
37144
|
"ui.chat.composer.start_recording_hint": "Start recording ({shortcut} or hold {pushToTalk})",
|
|
36502
37145
|
"ui.chat.composer.processing_audio": "Processing audio",
|
|
37146
|
+
"ui.chat.composer.dictation_failed_transient": "Dictation failed: the transcription service had a temporary fault. Try again.",
|
|
37147
|
+
"ui.chat.composer.dictation_failed_transient_take_kept": "Dictation failed: the transcription service had a temporary fault. Your recording is kept — Retry sends it again.",
|
|
36503
37148
|
"ui.chat.composer.welcome": "What can I help you with today?",
|
|
36504
37149
|
"ui.chat.composer.delivery_remedies_hint": "The message that could not be delivered has Send again and Edit controls in the conversation above this box: press Shift+Tab to reach them.",
|
|
36505
37150
|
"ui.chat.composer.secret_ask_notice": "The agent is asking for a secret. Enter it in the asks panel — you can keep chatting meanwhile.",
|
|
@@ -37755,11 +38400,9 @@ const enUiMesh = {
|
|
|
37755
38400
|
"ui.mesh.mesh_card.move_to": "Move to {device}",
|
|
37756
38401
|
"ui.mesh.mesh_card.copy_to": "Copy to {device}",
|
|
37757
38402
|
"ui.mesh.mesh_card.conversation_count": "{count, plural, one {{count, number, ::group-off} conversation} other {{count, number, ::group-off} conversations}}",
|
|
37758
|
-
"ui.mesh.mesh_card.revoked_membership": "revoked membership",
|
|
37759
38403
|
"ui.mesh.mesh_card.shown_of": "{shown, number, ::group-off} of {total, number, ::group-off}",
|
|
37760
38404
|
"ui.mesh.mesh_card.device_details": "{device} details",
|
|
37761
38405
|
"ui.mesh.mesh_card.memberships": "Memberships",
|
|
37762
|
-
"ui.mesh.mesh_card.revoked": " · revoked",
|
|
37763
38406
|
"ui.mesh.mesh_card.remove_from": "Remove from ",
|
|
37764
38407
|
"ui.mesh.mesh_card.conversations": "Conversations ",
|
|
37765
38408
|
"ui.mesh.mesh_card.this_device_did_not_report_its_conversations": "This device did not report its conversations.",
|
|
@@ -37818,8 +38461,8 @@ const enUiMesh = {
|
|
|
37818
38461
|
"ui.mesh.mesh_list.on_device_no_answer": "on {device} (not answering)",
|
|
37819
38462
|
"ui.mesh.mesh_list.sort_devices_by": "Sort devices by",
|
|
37820
38463
|
"ui.mesh.mesh_list.epoch": "epoch {epoch, number, ::group-off}",
|
|
37821
|
-
"ui.mesh.mesh_list.revoked_count": "
|
|
37822
|
-
"ui.mesh.mesh_list.
|
|
38464
|
+
"ui.mesh.mesh_list.revoked_count": "{count, plural, other {{count, number, ::group-off} revoked}}",
|
|
38465
|
+
"ui.mesh.mesh_list.revoked_toggle_label": "Show revoked memberships",
|
|
37823
38466
|
"ui.mesh.mesh_list.member": "member",
|
|
37824
38467
|
"ui.mesh.mesh_list.move_conversation": "Move {conversation}",
|
|
37825
38468
|
"ui.mesh.mesh_list.show_all_panel": "show all {count, plural, other {{count, number, ::group-off} in the panel}}",
|
|
@@ -40230,6 +40873,19 @@ const esUiCanvas = {
|
|
|
40230
40873
|
"ui.canvas.files.prepareError": "No se pudo preparar una copia local para esta acción",
|
|
40231
40874
|
"ui.canvas.files.pathCopyNote": "Las acciones de abrir, carpeta y ruta crean una copia local en el scratchpad de esta conversación."
|
|
40232
40875
|
};
|
|
40876
|
+
const esUiChatAnalytics = {
|
|
40877
|
+
"ui.chat.analytics.filters.top_level_only": "Solo principales",
|
|
40878
|
+
"ui.chat.analytics.search.clear": "Borrar búsqueda",
|
|
40879
|
+
"ui.chat.analytics.search.sessions": "Buscar sesiones",
|
|
40880
|
+
"ui.chat.analytics.sections.by_channel": "Por canal",
|
|
40881
|
+
"ui.chat.analytics.sections.by_model": "Por modelo",
|
|
40882
|
+
"ui.chat.analytics.sections.by_provider": "Por proveedor",
|
|
40883
|
+
"ui.chat.analytics.sections.by_session": "Por sesión",
|
|
40884
|
+
"ui.chat.analytics.sections.totals": "Totales",
|
|
40885
|
+
"ui.chat.analytics.title": "Analítica",
|
|
40886
|
+
"ui.chat.analytics.toolbar.refreshing": "Actualizando",
|
|
40887
|
+
"ui.chat.analytics.toolbar.this_session_only": "Solo esta sesión"
|
|
40888
|
+
};
|
|
40233
40889
|
const esUiChatAsks = {
|
|
40234
40890
|
"ui.chat.asks.context.messages_since": "{count, plural, one {# mensaje tuyo desde que se hizo esta consulta (último mensaje: {time})} many {# de mensajes tuyos desde que se hizo esta consulta (último mensaje: {time})} other {# mensajes tuyos desde que se hizo esta consulta (último mensaje: {time})}}",
|
|
40235
40891
|
"ui.chat.asks.dismiss.answered_in_chat.note": "ya respondiste en la conversación",
|
|
@@ -40258,6 +40914,41 @@ const esUiChatAttachments = {
|
|
|
40258
40914
|
"ui.chat.attachments.saved_path_copied": "Ruta de la copia guardada copiada",
|
|
40259
40915
|
"ui.chat.attachments.saved_copy_label": "Copia guardada"
|
|
40260
40916
|
};
|
|
40917
|
+
const esUiChatCanonical = {
|
|
40918
|
+
"ui.chat.canonical.sound.batch_attachment_unavailable": "Adjunto de audio no disponible.",
|
|
40919
|
+
"ui.chat.canonical.sound.player_failed": "No se pudo reproducir este sonido",
|
|
40920
|
+
"ui.chat.canonical.sound.stop.confirm_label": "Confirmación de solicitud de detención",
|
|
40921
|
+
"ui.chat.canonical.sound.stop.keep_waiting": "Seguir esperando",
|
|
40922
|
+
"ui.chat.canonical.sound.stop.question": "¿Detener esta generación?",
|
|
40923
|
+
"ui.chat.canonical.sound.stop.request_stop": "Solicitar detención",
|
|
40924
|
+
"ui.chat.canonical.sound.stop.warning": "El proveedor no tiene un endpoint de cancelación. La generación continúa y se cobrará si produce audio. La detención es un intento sin garantías: puede no cancelar la generación ni evitar el cobro.",
|
|
40925
|
+
"ui.chat.canonical.supplement.adjust_placeholder": "Ajusta el gráfico…",
|
|
40926
|
+
"ui.chat.canonical.supplement.details.attempts": "Intentos: {count, number, ::group-off}",
|
|
40927
|
+
"ui.chat.canonical.supplement.details.model": "Modelo: {name}",
|
|
40928
|
+
"ui.chat.canonical.supplement.file_actions.open_in_canvas": "Abrir en Canvas",
|
|
40929
|
+
"ui.chat.canonical.supplement.file_actions.open_in_default_app": "Abrir en la app predeterminada",
|
|
40930
|
+
"ui.chat.canonical.supplement.file_actions.reveal_in_finder": "Mostrar en el Finder",
|
|
40931
|
+
"ui.chat.canonical.supplement.frame.failed": "No se pudo mostrar este gráfico",
|
|
40932
|
+
"ui.chat.canonical.supplement.frame.loading": "Cargando gráfico…",
|
|
40933
|
+
"ui.chat.canonical.supplement.frame.source": "Origen: {name}",
|
|
40934
|
+
"ui.chat.canonical.supplement.preview_unavailable": "Vista previa integrada no disponible. Este HTML necesita recursos o contenido del documento no compatibles. Abre el archivo para verlo.",
|
|
40935
|
+
"ui.chat.canonical.supplement.send": "Enviar",
|
|
40936
|
+
"ui.chat.canonical.transcript.connect_provider": "Conectar un proveedor",
|
|
40937
|
+
"ui.chat.canonical.transcript.credential_lost": "La sesión ya no conserva la credencial mencionada en esta respuesta.",
|
|
40938
|
+
"ui.chat.canonical.transcript.edit": "Editar",
|
|
40939
|
+
"ui.chat.canonical.transcript.missing_session": "Esta conversación ya no está en este equipo.",
|
|
40940
|
+
"ui.chat.canonical.transcript.missing_session_detail": "Se eliminó o pertenece a un equipo con el que esta app no está conectada.",
|
|
40941
|
+
"ui.chat.canonical.transcript.reconnect": "Reconectar",
|
|
40942
|
+
"ui.chat.canonical.transcript.reconnecting": "Reconectando",
|
|
40943
|
+
"ui.chat.canonical.transcript.send_again": "Enviar de nuevo",
|
|
40944
|
+
"ui.chat.canonical.transcript.source_unavailable": "Esta conversación se puede leer, pero ahora mismo no se pudo confirmar el orden de sus mensajes con la fuente.",
|
|
40945
|
+
"ui.chat.canonical.transcript.stale_caption": "Se muestra la última vista guardada — comprobando si hay mensajes más recientes.",
|
|
40946
|
+
"ui.chat.canonical.transcript.start_new_chat": "Iniciar un chat nuevo",
|
|
40947
|
+
"ui.chat.canonical.transcript.stopped_before_finishing": "Se detuvo antes de terminar"
|
|
40948
|
+
};
|
|
40949
|
+
const esUiChatCommentaryActions = {
|
|
40950
|
+
"ui.chat.commentary_actions.label": "Acciones de la narración"
|
|
40951
|
+
};
|
|
40261
40952
|
const esUiChatComposer = {
|
|
40262
40953
|
"ui.chat.composer.clear_message": "Borrar mensaje",
|
|
40263
40954
|
"ui.chat.composer.message": "Mensaje",
|
|
@@ -40276,6 +40967,8 @@ const esUiChatComposer = {
|
|
|
40276
40967
|
"ui.chat.composer.starting_recording": "Iniciando grabación",
|
|
40277
40968
|
"ui.chat.composer.start_recording_hint": "Iniciar grabación ({shortcut} o mantén {pushToTalk})",
|
|
40278
40969
|
"ui.chat.composer.processing_audio": "Procesando audio",
|
|
40970
|
+
"ui.chat.composer.dictation_failed_transient": "Error de dictado: el servicio de transcripción sufrió un fallo temporal. Vuelve a intentarlo.",
|
|
40971
|
+
"ui.chat.composer.dictation_failed_transient_take_kept": "Error de dictado: el servicio de transcripción sufrió un fallo temporal. Tu grabación se conserva: Reintentar la envía de nuevo.",
|
|
40279
40972
|
"ui.chat.composer.welcome": "¿En qué puedo ayudarte hoy?",
|
|
40280
40973
|
"ui.chat.composer.delivery_remedies_hint": "El mensaje que no se pudo entregar tiene los controles Enviar de nuevo y Editar en la conversación, encima de este cuadro: pulsa Mayús+Tab para llegar a ellos.",
|
|
40281
40974
|
"ui.chat.composer.secret_ask_notice": "El agente está pidiendo un secreto. Escríbelo en el panel de consultas; puedes seguir chateando mientras tanto.",
|
|
@@ -40337,9 +41030,94 @@ const esUiChatLiveUpdates = {
|
|
|
40337
41030
|
"ui.chat.live_updates.reloading": "Recargando…",
|
|
40338
41031
|
"ui.chat.live_updates.reload_failed": "No se pudo recargar esta conversación. Inténtalo de nuevo."
|
|
40339
41032
|
};
|
|
41033
|
+
const esUiChatPickers = {
|
|
41034
|
+
"ui.chat.pickers.approvals.title": "Aprobaciones de herramientas",
|
|
41035
|
+
"ui.chat.pickers.commands.title": "Comandos",
|
|
41036
|
+
"ui.chat.pickers.copy.title": "Copiar",
|
|
41037
|
+
"ui.chat.pickers.credential.forget": "Olvidar",
|
|
41038
|
+
"ui.chat.pickers.credential.forget_confirmation": "Olvidar {name} en esta sesión",
|
|
41039
|
+
"ui.chat.pickers.credential.title": "Credencial",
|
|
41040
|
+
"ui.chat.pickers.effort.title": "Esfuerzo de razonamiento",
|
|
41041
|
+
"ui.chat.pickers.fast.premium_acknowledgement": "Entiendo que el modo rápido puede costar más por token",
|
|
41042
|
+
"ui.chat.pickers.fast.title": "Modo rápido",
|
|
41043
|
+
"ui.chat.pickers.fork.search_placeholder": "Prueba un enfoque diferente...",
|
|
41044
|
+
"ui.chat.pickers.goal.clear": "Borrar objetivo",
|
|
41045
|
+
"ui.chat.pickers.goal.mark_done": "Marcar como completado",
|
|
41046
|
+
"ui.chat.pickers.goal.placeholder": "Publica la versión con todas las comprobaciones en verde",
|
|
41047
|
+
"ui.chat.pickers.goal.title": "Objetivo de sesión",
|
|
41048
|
+
"ui.chat.pickers.login.title": "Iniciar sesión en un proveedor",
|
|
41049
|
+
"ui.chat.pickers.logout.confirm": "Eliminar la credencial guardada de esta cuenta",
|
|
41050
|
+
"ui.chat.pickers.logout.title": "Cerrar sesión",
|
|
41051
|
+
"ui.chat.pickers.loop.cancel": "Cancelar bucle",
|
|
41052
|
+
"ui.chat.pickers.loop.title": "Bucle",
|
|
41053
|
+
"ui.chat.pickers.models.connect_provider": "Conectar un proveedor",
|
|
41054
|
+
"ui.chat.pickers.models.native_details": "Detalles nativos — {name}",
|
|
41055
|
+
"ui.chat.pickers.models.set_as_default": "Hacer predeterminado el modelo actual",
|
|
41056
|
+
"ui.chat.pickers.models.title": "Modelo",
|
|
41057
|
+
"ui.chat.pickers.new_session.title": "Nueva conversación",
|
|
41058
|
+
"ui.chat.pickers.profile.loading_detail": "Cargando detalles",
|
|
41059
|
+
"ui.chat.pickers.reload.title": "Recargar esta conversación",
|
|
41060
|
+
"ui.chat.pickers.rename.title": "Renombrar conversación",
|
|
41061
|
+
"ui.chat.pickers.resume.title": "Reanudar una conversación",
|
|
41062
|
+
"ui.chat.pickers.skills.loading": "Cargando",
|
|
41063
|
+
"ui.chat.pickers.skills.title": "Habilidades",
|
|
41064
|
+
"ui.chat.pickers.stop.all_sessions": "Todas las sesiones ({count, number, ::group-off})",
|
|
41065
|
+
"ui.chat.pickers.stop.confirm": "{count, plural, one {Detener esta sesión ahora} many {Detener {count, number, ::group-off} de sesiones ahora} other {Detener {count, number, ::group-off} sesiones ahora}}",
|
|
41066
|
+
"ui.chat.pickers.stop.title": "Detener",
|
|
41067
|
+
"ui.chat.pickers.theme.title": "Tema"
|
|
41068
|
+
};
|
|
40340
41069
|
const esUiChatResponseActions = {
|
|
40341
41070
|
"ui.chat.response_actions.label": "Acciones de la respuesta"
|
|
40342
41071
|
};
|
|
41072
|
+
const esUiChatRunDetails = {
|
|
41073
|
+
"ui.chat.run_details.jobs": "Trabajos",
|
|
41074
|
+
"ui.chat.run_details.keep": "Mantener"
|
|
41075
|
+
};
|
|
41076
|
+
const esUiChatSidebar = {
|
|
41077
|
+
"ui.chat.sidebar.agents.clear_filter": "Borrar filtro de agentes",
|
|
41078
|
+
"ui.chat.sidebar.agents.create": "Crear agente",
|
|
41079
|
+
"ui.chat.sidebar.agents.dismiss_offer": "Descartar sugerencia de agentes integrados",
|
|
41080
|
+
"ui.chat.sidebar.agents.empty": "Aún no hay agentes",
|
|
41081
|
+
"ui.chat.sidebar.agents.filter": "Filtrar agentes",
|
|
41082
|
+
"ui.chat.sidebar.agents.loading": "Cargando agentes…",
|
|
41083
|
+
"ui.chat.sidebar.agents.no_match": "Ningún agente coincide",
|
|
41084
|
+
"ui.chat.sidebar.drafts.clear_all": "Borrar todo",
|
|
41085
|
+
"ui.chat.sidebar.drafts.clear_all_label": "Borrar todos los borradores",
|
|
41086
|
+
"ui.chat.sidebar.header.create": "Nuevo agente o equipo",
|
|
41087
|
+
"ui.chat.sidebar.header.create_agent": "Nuevo agente",
|
|
41088
|
+
"ui.chat.sidebar.header.create_team": "Nuevo equipo",
|
|
41089
|
+
"ui.chat.sidebar.header.open_agent": "Abrir agente…",
|
|
41090
|
+
"ui.chat.sidebar.header.search": "Buscar chats y agentes",
|
|
41091
|
+
"ui.chat.sidebar.header.view_options": "Opciones de vista",
|
|
41092
|
+
"ui.chat.sidebar.list.connecting": "Conectando con los chats…",
|
|
41093
|
+
"ui.chat.sidebar.list.empty": "Aún no hay chats. Elige un agente, un equipo o Nuevo chat.",
|
|
41094
|
+
"ui.chat.sidebar.list.loading_more": "Cargando más…",
|
|
41095
|
+
"ui.chat.sidebar.list.offline": "Sin conexión con el backend — se muestra el último estado conocido.",
|
|
41096
|
+
"ui.chat.sidebar.list.retry_refresh": "Reintentar actualización",
|
|
41097
|
+
"ui.chat.sidebar.list.truncated_legacy": "Se muestran hasta 500 chats. Los más antiguos siguen disponibles en la terminal.",
|
|
41098
|
+
"ui.chat.sidebar.nav.chats": "Conversaciones",
|
|
41099
|
+
"ui.chat.sidebar.pins.drag_title": "Arrastrar para reordenar · Esc cancela",
|
|
41100
|
+
"ui.chat.sidebar.pins.failure": "{action, select, pin {No se pudo fijar “{title}”.} unpin {No se pudo desfijar “{title}”.} other {No se pudo actualizar “{title}”.}}",
|
|
41101
|
+
"ui.chat.sidebar.row.archived_suffix": ", archivada",
|
|
41102
|
+
"ui.chat.sidebar.row.in_conversation": "en la conversación",
|
|
41103
|
+
"ui.chat.sidebar.row.matched_in_conversation": ", coincide en la conversación",
|
|
41104
|
+
"ui.chat.sidebar.row.not_sent": "Aún no enviado",
|
|
41105
|
+
"ui.chat.sidebar.row_menu.copy_id": "Copiar ID de sesión",
|
|
41106
|
+
"ui.chat.sidebar.row_menu.fork": "Bifurcar conversación",
|
|
41107
|
+
"ui.chat.sidebar.row_menu.move_down": "Bajar conversación",
|
|
41108
|
+
"ui.chat.sidebar.row_menu.move_up": "Subir conversación",
|
|
41109
|
+
"ui.chat.sidebar.row_menu.rename": "Renombrar conversación",
|
|
41110
|
+
"ui.chat.sidebar.search.clear": "Borrar búsqueda",
|
|
41111
|
+
"ui.chat.sidebar.search.include_archived": "Incluir archivadas",
|
|
41112
|
+
"ui.chat.sidebar.search.names_only": "Solo se buscan nombres de chats. Actualiza Local Operator para buscar dentro de las conversaciones.",
|
|
41113
|
+
"ui.chat.sidebar.search.no_match": "Nada en tus chats coincide con “{query}”.",
|
|
41114
|
+
"ui.chat.sidebar.search.placeholder": "Filtrar chats y agentes",
|
|
41115
|
+
"ui.chat.sidebar.search.searching": "Buscando en las conversaciones…",
|
|
41116
|
+
"ui.chat.sidebar.search.too_long": "Las búsquedas tienen un límite de {max, number, ::group-off} caracteres. Esta lo supera, así que solo se busca en los nombres de los chats.",
|
|
41117
|
+
"ui.chat.sidebar.search.unavailable": "La búsqueda en las conversaciones no está disponible, así que estas coincidencias son solo de nombres.",
|
|
41118
|
+
"ui.chat.sidebar.teams.create": "Crear equipo",
|
|
41119
|
+
"ui.chat.sidebar.teams.loading": "Cargando equipos…"
|
|
41120
|
+
};
|
|
40343
41121
|
const esUiChatSidebarView = {
|
|
40344
41122
|
"ui.chat.sidebar_view.group_by": "Agrupar por",
|
|
40345
41123
|
"ui.chat.sidebar_view.time_basis": "Base temporal",
|
|
@@ -40364,6 +41142,12 @@ const esUiChatSidebarView = {
|
|
|
40364
41142
|
"ui.chat.sidebar_view.section.agents": "Agentes",
|
|
40365
41143
|
"ui.chat.sidebar_view.section.teams": "Equipos"
|
|
40366
41144
|
};
|
|
41145
|
+
const esUiChatTagDialogs = {
|
|
41146
|
+
"ui.chat.tag_dialogs.deleted_name": "Se eliminó “{name}”",
|
|
41147
|
+
"ui.chat.tag_dialogs.created_assigned": "Se creó “{name}” y se añadió a esta conversación",
|
|
41148
|
+
"ui.chat.tag_dialogs.assign_created_failed": "Se creó “{name}”, pero no se pudo añadir a esta conversación. Selecciónala en la lista para añadirla.",
|
|
41149
|
+
"ui.chat.tag_dialogs.changed_elsewhere": "Las etiquetas cambiaron en otro lugar. La lista ya muestra las actuales; vuelve a seleccionar para aplicar tu cambio."
|
|
41150
|
+
};
|
|
40367
41151
|
const esUiChatTags = {
|
|
40368
41152
|
"ui.chat.tags.label": "Etiquetas",
|
|
40369
41153
|
"ui.chat.tags.menu": "Etiquetas…",
|
|
@@ -40649,6 +41433,13 @@ const esUiCommonErrors = {
|
|
|
40649
41433
|
"ui.common.errors.error_boundary.stack_trace": "Traza de pila",
|
|
40650
41434
|
"ui.common.errors.error_boundary.the_application_encountered_an_error_try_again_or_contact_support": "La aplicación encontró un error. Vuelve a intentarlo o contacta con soporte si el problema persiste."
|
|
40651
41435
|
};
|
|
41436
|
+
const esUiCommonFileActions = {
|
|
41437
|
+
"ui.common.file_actions.copy_file_path": "Copiar ruta del archivo",
|
|
41438
|
+
"ui.common.file_actions.open_file": "Abrir archivo",
|
|
41439
|
+
"ui.common.file_actions.open_folder": "Abrir carpeta",
|
|
41440
|
+
"ui.common.file_actions.preview": "Vista previa",
|
|
41441
|
+
"ui.common.file_actions.show_in_canvas": "Mostrar en Canvas"
|
|
41442
|
+
};
|
|
40652
41443
|
const esUiCommonForms = {
|
|
40653
41444
|
"ui.common.forms.autocomplete_field.cancel_editing": "Cancelar la edición de {label}",
|
|
40654
41445
|
"ui.common.forms.autocomplete_field.enter_value": "Escribe un valor…",
|
|
@@ -40836,6 +41627,12 @@ const esUiCommonUpdates = {
|
|
|
40836
41627
|
"ui.common.updates.wait.minutes_seconds": "En espera desde hace {minutes, plural, one {{minutes, number, ::group-off} minuto} many {{minutes, number, ::group-off} de minutos} other {{minutes, number, ::group-off} minutos}} y {seconds, plural, one {{seconds, number, ::group-off} segundo} many {{seconds, number, ::group-off} de segundos} other {{seconds, number, ::group-off} segundos}}",
|
|
40837
41628
|
"ui.common.updates.wait.seconds": "En espera desde hace {seconds, plural, one {{seconds, number, ::group-off} segundo} many {{seconds, number, ::group-off} de segundos} other {{seconds, number, ::group-off} segundos}}"
|
|
40838
41629
|
};
|
|
41630
|
+
const esUiCommonViewer = {
|
|
41631
|
+
"ui.common.viewer.opening": "Abriendo…",
|
|
41632
|
+
"ui.common.viewer.reset_view": "Restablecer vista",
|
|
41633
|
+
"ui.common.viewer.zoom_in": "Acercar",
|
|
41634
|
+
"ui.common.viewer.zoom_out": "Alejar"
|
|
41635
|
+
};
|
|
40839
41636
|
const esUiConsole = {
|
|
40840
41637
|
"ui.console.capacity.summary": "{live, number, ::group-off} activas de {limit, number, ::group-off} en la app",
|
|
40841
41638
|
"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}}",
|
|
@@ -41427,11 +42224,9 @@ const esUiMesh = {
|
|
|
41427
42224
|
"ui.mesh.mesh_card.move_to": "Mover a {device}",
|
|
41428
42225
|
"ui.mesh.mesh_card.copy_to": "Copiar a {device}",
|
|
41429
42226
|
"ui.mesh.mesh_card.conversation_count": "{count, plural, one {{count, number, ::group-off} conversación} many {{count, number, ::group-off} de conversaciones} other {{count, number, ::group-off} conversaciones}}",
|
|
41430
|
-
"ui.mesh.mesh_card.revoked_membership": "membresía revocada",
|
|
41431
42227
|
"ui.mesh.mesh_card.shown_of": "{shown, number, ::group-off} de {total, number, ::group-off}",
|
|
41432
42228
|
"ui.mesh.mesh_card.device_details": "Detalles de {device}",
|
|
41433
42229
|
"ui.mesh.mesh_card.memberships": "Membresías",
|
|
41434
|
-
"ui.mesh.mesh_card.revoked": " · revocada",
|
|
41435
42230
|
"ui.mesh.mesh_card.remove_from": "Quitar de ",
|
|
41436
42231
|
"ui.mesh.mesh_card.conversations": "Conversaciones ",
|
|
41437
42232
|
"ui.mesh.mesh_card.this_device_did_not_report_its_conversations": "Este dispositivo no informó de sus conversaciones.",
|
|
@@ -41490,8 +42285,8 @@ const esUiMesh = {
|
|
|
41490
42285
|
"ui.mesh.mesh_list.on_device_no_answer": "en {device} (sin respuesta)",
|
|
41491
42286
|
"ui.mesh.mesh_list.sort_devices_by": "Ordenar dispositivos por",
|
|
41492
42287
|
"ui.mesh.mesh_list.epoch": "época {epoch, number, ::group-off}",
|
|
41493
|
-
"ui.mesh.mesh_list.revoked_count": "
|
|
41494
|
-
"ui.mesh.mesh_list.
|
|
42288
|
+
"ui.mesh.mesh_list.revoked_count": "{count, plural, other {{count, number, ::group-off} revocados}}",
|
|
42289
|
+
"ui.mesh.mesh_list.revoked_toggle_label": "Mostrar las membresías revocadas",
|
|
41495
42290
|
"ui.mesh.mesh_list.member": "miembro",
|
|
41496
42291
|
"ui.mesh.mesh_list.move_conversation": "Mover {conversation}",
|
|
41497
42292
|
"ui.mesh.mesh_list.show_all_panel": "mostrar los {count, plural, other {{count, number, ::group-off} del panel}}",
|
|
@@ -43902,6 +44697,19 @@ const frUiCanvas = {
|
|
|
43902
44697
|
"ui.canvas.files.prepareError": "Impossible de préparer une copie locale pour cette action",
|
|
43903
44698
|
"ui.canvas.files.pathCopyNote": "Les actions Ouvrir, Dossier et Chemin créent une copie locale dans le dossier de travail de cette conversation."
|
|
43904
44699
|
};
|
|
44700
|
+
const frUiChatAnalytics = {
|
|
44701
|
+
"ui.chat.analytics.filters.top_level_only": "Sessions principales uniquement",
|
|
44702
|
+
"ui.chat.analytics.search.clear": "Effacer la recherche",
|
|
44703
|
+
"ui.chat.analytics.search.sessions": "Rechercher des sessions",
|
|
44704
|
+
"ui.chat.analytics.sections.by_channel": "Par canal",
|
|
44705
|
+
"ui.chat.analytics.sections.by_model": "Par modèle",
|
|
44706
|
+
"ui.chat.analytics.sections.by_provider": "Par fournisseur",
|
|
44707
|
+
"ui.chat.analytics.sections.by_session": "Par session",
|
|
44708
|
+
"ui.chat.analytics.sections.totals": "Totaux",
|
|
44709
|
+
"ui.chat.analytics.title": "Statistiques",
|
|
44710
|
+
"ui.chat.analytics.toolbar.refreshing": "Actualisation",
|
|
44711
|
+
"ui.chat.analytics.toolbar.this_session_only": "Cette session uniquement"
|
|
44712
|
+
};
|
|
43905
44713
|
const frUiChatAsks = {
|
|
43906
44714
|
"ui.chat.asks.context.messages_since": "{count, plural, one {# message de votre part depuis cette demande (dernier message à {time})} many {# de messages de votre part depuis cette demande (dernier message à {time})} other {# messages de votre part depuis cette demande (dernier message à {time})}}",
|
|
43907
44715
|
"ui.chat.asks.dismiss.answered_in_chat.note": "vous avez déjà répondu dans la conversation",
|
|
@@ -43930,6 +44738,41 @@ const frUiChatAttachments = {
|
|
|
43930
44738
|
"ui.chat.attachments.saved_path_copied": "Chemin de la copie conservée copié",
|
|
43931
44739
|
"ui.chat.attachments.saved_copy_label": "Copie conservée"
|
|
43932
44740
|
};
|
|
44741
|
+
const frUiChatCanonical = {
|
|
44742
|
+
"ui.chat.canonical.sound.batch_attachment_unavailable": "Pièce jointe audio indisponible.",
|
|
44743
|
+
"ui.chat.canonical.sound.player_failed": "Impossible de lire ce son",
|
|
44744
|
+
"ui.chat.canonical.sound.stop.confirm_label": "Confirmation de la demande d’arrêt",
|
|
44745
|
+
"ui.chat.canonical.sound.stop.keep_waiting": "Continuer d’attendre",
|
|
44746
|
+
"ui.chat.canonical.sound.stop.question": "Arrêter cette génération ?",
|
|
44747
|
+
"ui.chat.canonical.sound.stop.request_stop": "Demander l’arrêt",
|
|
44748
|
+
"ui.chat.canonical.sound.stop.warning": "Le fournisseur ne dispose d’aucun endpoint d’annulation. La génération continue et sera facturée si elle produit un audio. La demande d’arrêt est traitée au mieux, sans garantie d’annulation ni d’absence de frais.",
|
|
44749
|
+
"ui.chat.canonical.supplement.adjust_placeholder": "Ajustez le graphique…",
|
|
44750
|
+
"ui.chat.canonical.supplement.details.attempts": "Tentatives : {count, number, ::group-off}",
|
|
44751
|
+
"ui.chat.canonical.supplement.details.model": "Modèle : {name}",
|
|
44752
|
+
"ui.chat.canonical.supplement.file_actions.open_in_canvas": "Ouvrir dans Canvas",
|
|
44753
|
+
"ui.chat.canonical.supplement.file_actions.open_in_default_app": "Ouvrir dans l’application par défaut",
|
|
44754
|
+
"ui.chat.canonical.supplement.file_actions.reveal_in_finder": "Afficher dans Finder",
|
|
44755
|
+
"ui.chat.canonical.supplement.frame.failed": "Impossible d’afficher ce graphique",
|
|
44756
|
+
"ui.chat.canonical.supplement.frame.loading": "Chargement du graphique…",
|
|
44757
|
+
"ui.chat.canonical.supplement.frame.source": "Source : {name}",
|
|
44758
|
+
"ui.chat.canonical.supplement.preview_unavailable": "Aperçu intégré indisponible. Ce HTML nécessite des ressources non prises en charge ou du contenu de document incompatible. Ouvrez le fichier pour l’afficher.",
|
|
44759
|
+
"ui.chat.canonical.supplement.send": "Envoyer",
|
|
44760
|
+
"ui.chat.canonical.transcript.connect_provider": "Connecter un fournisseur",
|
|
44761
|
+
"ui.chat.canonical.transcript.credential_lost": "La session ne dispose plus de l’identifiant nommé dans cette réponse.",
|
|
44762
|
+
"ui.chat.canonical.transcript.edit": "Modifier",
|
|
44763
|
+
"ui.chat.canonical.transcript.missing_session": "Cette conversation n’est plus sur cet ordinateur.",
|
|
44764
|
+
"ui.chat.canonical.transcript.missing_session_detail": "Elle a été supprimée, ou elle appartient à un ordinateur auquel cette application n’est pas connectée.",
|
|
44765
|
+
"ui.chat.canonical.transcript.reconnect": "Rétablir la connexion",
|
|
44766
|
+
"ui.chat.canonical.transcript.reconnecting": "Reconnexion",
|
|
44767
|
+
"ui.chat.canonical.transcript.send_again": "Renvoyer",
|
|
44768
|
+
"ui.chat.canonical.transcript.source_unavailable": "Cette conversation reste lisible, mais l’ordre de ses messages n’a pas pu être confirmé auprès de la source pour le moment.",
|
|
44769
|
+
"ui.chat.canonical.transcript.stale_caption": "Affichage de la dernière vue enregistrée — recherche de messages plus récents.",
|
|
44770
|
+
"ui.chat.canonical.transcript.start_new_chat": "Démarrer une nouvelle conversation",
|
|
44771
|
+
"ui.chat.canonical.transcript.stopped_before_finishing": "Arrêtée avant la fin"
|
|
44772
|
+
};
|
|
44773
|
+
const frUiChatCommentaryActions = {
|
|
44774
|
+
"ui.chat.commentary_actions.label": "Actions du commentaire"
|
|
44775
|
+
};
|
|
43933
44776
|
const frUiChatComposer = {
|
|
43934
44777
|
"ui.chat.composer.clear_message": "Effacer le message",
|
|
43935
44778
|
"ui.chat.composer.message": "Message",
|
|
@@ -43948,6 +44791,8 @@ const frUiChatComposer = {
|
|
|
43948
44791
|
"ui.chat.composer.starting_recording": "Démarrage de l’enregistrement",
|
|
43949
44792
|
"ui.chat.composer.start_recording_hint": "Démarrer l’enregistrement ({shortcut} ou maintenir {pushToTalk})",
|
|
43950
44793
|
"ui.chat.composer.processing_audio": "Traitement de l’audio",
|
|
44794
|
+
"ui.chat.composer.dictation_failed_transient": "Échec de la dictée : le service de transcription a subi une panne temporaire. Réessayez.",
|
|
44795
|
+
"ui.chat.composer.dictation_failed_transient_take_kept": "Échec de la dictée : le service de transcription a subi une panne temporaire. Votre enregistrement est conservé — Réessayer l’envoie à nouveau.",
|
|
43951
44796
|
"ui.chat.composer.welcome": "Comment puis-je vous aider aujourd’hui ?",
|
|
43952
44797
|
"ui.chat.composer.delivery_remedies_hint": "Le message qui n’a pas pu être délivré dispose des commandes Renvoyer et Modifier dans la conversation, au-dessus de ce champ : appuyez sur Maj+Tab pour les atteindre.",
|
|
43953
44798
|
"ui.chat.composer.secret_ask_notice": "L’agent demande un secret. Saisissez-le dans le panneau des demandes — vous pouvez continuer à discuter entre-temps.",
|
|
@@ -44009,9 +44854,94 @@ const frUiChatLiveUpdates = {
|
|
|
44009
44854
|
"ui.chat.live_updates.reloading": "Rechargement…",
|
|
44010
44855
|
"ui.chat.live_updates.reload_failed": "Impossible de recharger cette conversation. Réessayez."
|
|
44011
44856
|
};
|
|
44857
|
+
const frUiChatPickers = {
|
|
44858
|
+
"ui.chat.pickers.approvals.title": "Approbations des outils",
|
|
44859
|
+
"ui.chat.pickers.commands.title": "Commandes",
|
|
44860
|
+
"ui.chat.pickers.copy.title": "Copier",
|
|
44861
|
+
"ui.chat.pickers.credential.forget": "Oublier",
|
|
44862
|
+
"ui.chat.pickers.credential.forget_confirmation": "Oublier {name} pour cette session",
|
|
44863
|
+
"ui.chat.pickers.credential.title": "Identifiant",
|
|
44864
|
+
"ui.chat.pickers.effort.title": "Effort de raisonnement",
|
|
44865
|
+
"ui.chat.pickers.fast.premium_acknowledgement": "Je comprends que le mode rapide peut coûter plus cher par token",
|
|
44866
|
+
"ui.chat.pickers.fast.title": "Mode rapide",
|
|
44867
|
+
"ui.chat.pickers.fork.search_placeholder": "Essayez une autre approche…",
|
|
44868
|
+
"ui.chat.pickers.goal.clear": "Effacer l’objectif",
|
|
44869
|
+
"ui.chat.pickers.goal.mark_done": "Marquer comme atteint",
|
|
44870
|
+
"ui.chat.pickers.goal.placeholder": "Publiez la version avec tous les contrôles au vert",
|
|
44871
|
+
"ui.chat.pickers.goal.title": "Objectif de la session",
|
|
44872
|
+
"ui.chat.pickers.login.title": "Se connecter à un fournisseur",
|
|
44873
|
+
"ui.chat.pickers.logout.confirm": "Supprimer l’identifiant enregistré de ce compte",
|
|
44874
|
+
"ui.chat.pickers.logout.title": "Se déconnecter",
|
|
44875
|
+
"ui.chat.pickers.loop.cancel": "Annuler la boucle",
|
|
44876
|
+
"ui.chat.pickers.loop.title": "Boucle",
|
|
44877
|
+
"ui.chat.pickers.models.connect_provider": "Connecter un fournisseur",
|
|
44878
|
+
"ui.chat.pickers.models.native_details": "Détails natifs — {name}",
|
|
44879
|
+
"ui.chat.pickers.models.set_as_default": "Définir le modèle actuel par défaut",
|
|
44880
|
+
"ui.chat.pickers.models.title": "Modèle",
|
|
44881
|
+
"ui.chat.pickers.new_session.title": "Nouvelle conversation",
|
|
44882
|
+
"ui.chat.pickers.profile.loading_detail": "Chargement des détails",
|
|
44883
|
+
"ui.chat.pickers.reload.title": "Recharger cette conversation",
|
|
44884
|
+
"ui.chat.pickers.rename.title": "Renommer la conversation",
|
|
44885
|
+
"ui.chat.pickers.resume.title": "Reprendre une conversation",
|
|
44886
|
+
"ui.chat.pickers.skills.loading": "Chargement",
|
|
44887
|
+
"ui.chat.pickers.skills.title": "Compétences",
|
|
44888
|
+
"ui.chat.pickers.stop.all_sessions": "Toutes les sessions ({count, number, ::group-off})",
|
|
44889
|
+
"ui.chat.pickers.stop.confirm": "Arrêter {count, plural, one {cette session} many {{count, number, ::group-off} de sessions} other {{count, number, ::group-off} sessions}} maintenant",
|
|
44890
|
+
"ui.chat.pickers.stop.title": "Arrêter",
|
|
44891
|
+
"ui.chat.pickers.theme.title": "Thème"
|
|
44892
|
+
};
|
|
44012
44893
|
const frUiChatResponseActions = {
|
|
44013
44894
|
"ui.chat.response_actions.label": "Actions de la réponse"
|
|
44014
44895
|
};
|
|
44896
|
+
const frUiChatRunDetails = {
|
|
44897
|
+
"ui.chat.run_details.jobs": "Tâches",
|
|
44898
|
+
"ui.chat.run_details.keep": "Conserver"
|
|
44899
|
+
};
|
|
44900
|
+
const frUiChatSidebar = {
|
|
44901
|
+
"ui.chat.sidebar.agents.clear_filter": "Effacer le filtre des agents",
|
|
44902
|
+
"ui.chat.sidebar.agents.create": "Créer un agent",
|
|
44903
|
+
"ui.chat.sidebar.agents.dismiss_offer": "Ignorer la suggestion d’agents intégrés",
|
|
44904
|
+
"ui.chat.sidebar.agents.empty": "Aucun agent pour l’instant",
|
|
44905
|
+
"ui.chat.sidebar.agents.filter": "Filtrer les agents",
|
|
44906
|
+
"ui.chat.sidebar.agents.loading": "Chargement des agents…",
|
|
44907
|
+
"ui.chat.sidebar.agents.no_match": "Aucun agent ne correspond",
|
|
44908
|
+
"ui.chat.sidebar.drafts.clear_all": "Tout effacer",
|
|
44909
|
+
"ui.chat.sidebar.drafts.clear_all_label": "Effacer tous les brouillons",
|
|
44910
|
+
"ui.chat.sidebar.header.create": "Nouvel agent ou nouvelle équipe",
|
|
44911
|
+
"ui.chat.sidebar.header.create_agent": "Nouvel agent",
|
|
44912
|
+
"ui.chat.sidebar.header.create_team": "Nouvelle équipe",
|
|
44913
|
+
"ui.chat.sidebar.header.open_agent": "Ouvrir un agent…",
|
|
44914
|
+
"ui.chat.sidebar.header.search": "Rechercher des conversations et des agents",
|
|
44915
|
+
"ui.chat.sidebar.header.view_options": "Options d’affichage",
|
|
44916
|
+
"ui.chat.sidebar.list.connecting": "Connexion aux conversations…",
|
|
44917
|
+
"ui.chat.sidebar.list.empty": "Aucune conversation pour l’instant. Choisissez un agent, une équipe ou Nouvelle conversation.",
|
|
44918
|
+
"ui.chat.sidebar.list.loading_more": "Chargement de la suite…",
|
|
44919
|
+
"ui.chat.sidebar.list.offline": "Non connecté au backend — affichage du dernier état connu.",
|
|
44920
|
+
"ui.chat.sidebar.list.retry_refresh": "Relancer l’actualisation",
|
|
44921
|
+
"ui.chat.sidebar.list.truncated_legacy": "Affichage de 500 conversations maximum. Les conversations plus anciennes restent disponibles dans le terminal.",
|
|
44922
|
+
"ui.chat.sidebar.nav.chats": "Conversations",
|
|
44923
|
+
"ui.chat.sidebar.pins.drag_title": "Faites glisser pour réorganiser · Échap annule",
|
|
44924
|
+
"ui.chat.sidebar.pins.failure": "{action, select, pin {Impossible d’épingler « {title} ».} unpin {Impossible de désépingler « {title} ».} other {Impossible de mettre à jour « {title} ».}}",
|
|
44925
|
+
"ui.chat.sidebar.row.archived_suffix": ", archivée",
|
|
44926
|
+
"ui.chat.sidebar.row.in_conversation": "dans la conversation",
|
|
44927
|
+
"ui.chat.sidebar.row.matched_in_conversation": ", correspondance dans la conversation",
|
|
44928
|
+
"ui.chat.sidebar.row.not_sent": "Pas encore envoyé",
|
|
44929
|
+
"ui.chat.sidebar.row_menu.copy_id": "Copier l’ID de session",
|
|
44930
|
+
"ui.chat.sidebar.row_menu.fork": "Bifurquer la conversation",
|
|
44931
|
+
"ui.chat.sidebar.row_menu.move_down": "Déplacer la conversation vers le bas",
|
|
44932
|
+
"ui.chat.sidebar.row_menu.move_up": "Déplacer la conversation vers le haut",
|
|
44933
|
+
"ui.chat.sidebar.row_menu.rename": "Renommer la conversation",
|
|
44934
|
+
"ui.chat.sidebar.search.clear": "Effacer la recherche",
|
|
44935
|
+
"ui.chat.sidebar.search.include_archived": "Inclure les conversations archivées",
|
|
44936
|
+
"ui.chat.sidebar.search.names_only": "Recherche limitée aux noms des conversations. Mettez Local Operator à jour pour rechercher dans leur contenu.",
|
|
44937
|
+
"ui.chat.sidebar.search.no_match": "Aucune correspondance pour « {query} » dans vos conversations.",
|
|
44938
|
+
"ui.chat.sidebar.search.placeholder": "Filtrer les conversations et les agents",
|
|
44939
|
+
"ui.chat.sidebar.search.searching": "Recherche dans les conversations…",
|
|
44940
|
+
"ui.chat.sidebar.search.too_long": "Les recherches sont limitées à {max, number, ::group-off} caractères. Celle-ci est plus longue ; seuls les noms des conversations sont donc recherchés.",
|
|
44941
|
+
"ui.chat.sidebar.search.unavailable": "La recherche dans les conversations est indisponible ; les résultats portent donc uniquement sur les noms.",
|
|
44942
|
+
"ui.chat.sidebar.teams.create": "Créer une équipe",
|
|
44943
|
+
"ui.chat.sidebar.teams.loading": "Chargement des équipes…"
|
|
44944
|
+
};
|
|
44015
44945
|
const frUiChatSidebarView = {
|
|
44016
44946
|
"ui.chat.sidebar_view.group_by": "Grouper par",
|
|
44017
44947
|
"ui.chat.sidebar_view.time_basis": "Base temporelle",
|
|
@@ -44036,6 +44966,12 @@ const frUiChatSidebarView = {
|
|
|
44036
44966
|
"ui.chat.sidebar_view.section.agents": "Agents",
|
|
44037
44967
|
"ui.chat.sidebar_view.section.teams": "Équipes"
|
|
44038
44968
|
};
|
|
44969
|
+
const frUiChatTagDialogs = {
|
|
44970
|
+
"ui.chat.tag_dialogs.deleted_name": "« {name} » supprimée",
|
|
44971
|
+
"ui.chat.tag_dialogs.created_assigned": "« {name} » créée et ajoutée à cette conversation",
|
|
44972
|
+
"ui.chat.tag_dialogs.assign_created_failed": "« {name} » a été créée, mais n’a pas pu être ajoutée à cette conversation. Sélectionnez-la dans la liste pour l’ajouter.",
|
|
44973
|
+
"ui.chat.tag_dialogs.changed_elsewhere": "Les étiquettes ont été modifiées ailleurs. La liste affiche maintenant les étiquettes à jour ; refaites votre sélection pour appliquer votre modification."
|
|
44974
|
+
};
|
|
44039
44975
|
const frUiChatTags = {
|
|
44040
44976
|
"ui.chat.tags.label": "Étiquettes",
|
|
44041
44977
|
"ui.chat.tags.menu": "Étiquettes…",
|
|
@@ -44321,6 +45257,13 @@ const frUiCommonErrors = {
|
|
|
44321
45257
|
"ui.common.errors.error_boundary.stack_trace": "Trace de la pile",
|
|
44322
45258
|
"ui.common.errors.error_boundary.the_application_encountered_an_error_try_again_or_contact_support": "L’application a rencontré une erreur. Réessayez ou contactez le support si le problème persiste."
|
|
44323
45259
|
};
|
|
45260
|
+
const frUiCommonFileActions = {
|
|
45261
|
+
"ui.common.file_actions.copy_file_path": "Copier le chemin du fichier",
|
|
45262
|
+
"ui.common.file_actions.open_file": "Ouvrir le fichier",
|
|
45263
|
+
"ui.common.file_actions.open_folder": "Ouvrir le dossier",
|
|
45264
|
+
"ui.common.file_actions.preview": "Aperçu",
|
|
45265
|
+
"ui.common.file_actions.show_in_canvas": "Afficher dans Canvas"
|
|
45266
|
+
};
|
|
44324
45267
|
const frUiCommonForms = {
|
|
44325
45268
|
"ui.common.forms.autocomplete_field.cancel_editing": "Annuler la modification de {label}",
|
|
44326
45269
|
"ui.common.forms.autocomplete_field.enter_value": "Saisir une valeur…",
|
|
@@ -44508,6 +45451,12 @@ const frUiCommonUpdates = {
|
|
|
44508
45451
|
"ui.common.updates.wait.minutes_seconds": "En attente depuis {minutes, plural, one {{minutes, number, ::group-off} minute} many {{minutes, number, ::group-off} de minutes} other {{minutes, number, ::group-off} minutes}} {seconds, plural, one {{seconds, number, ::group-off} seconde} many {{seconds, number, ::group-off} de secondes} other {{seconds, number, ::group-off} secondes}}",
|
|
44509
45452
|
"ui.common.updates.wait.seconds": "En attente depuis {seconds, plural, one {{seconds, number, ::group-off} seconde} many {{seconds, number, ::group-off} de secondes} other {{seconds, number, ::group-off} secondes}}"
|
|
44510
45453
|
};
|
|
45454
|
+
const frUiCommonViewer = {
|
|
45455
|
+
"ui.common.viewer.opening": "Ouverture…",
|
|
45456
|
+
"ui.common.viewer.reset_view": "Réinitialiser la vue",
|
|
45457
|
+
"ui.common.viewer.zoom_in": "Zoom avant",
|
|
45458
|
+
"ui.common.viewer.zoom_out": "Zoom arrière"
|
|
45459
|
+
};
|
|
44511
45460
|
const frUiConsole = {
|
|
44512
45461
|
"ui.console.close.body": "Le programme en cours sera arrêté et son onglet supprimé.",
|
|
44513
45462
|
"ui.console.close.busy": "Fermeture…",
|
|
@@ -45099,11 +46048,9 @@ const frUiMesh = {
|
|
|
45099
46048
|
"ui.mesh.mesh_card.move_to": "Déplacer vers {device}",
|
|
45100
46049
|
"ui.mesh.mesh_card.copy_to": "Copier vers {device}",
|
|
45101
46050
|
"ui.mesh.mesh_card.conversation_count": "{count, plural, one {{count, number, ::group-off} conversation} many {{count, number, ::group-off} de conversations} other {{count, number, ::group-off} conversations}}",
|
|
45102
|
-
"ui.mesh.mesh_card.revoked_membership": "appartenance révoquée",
|
|
45103
46051
|
"ui.mesh.mesh_card.shown_of": "{shown, number, ::group-off} sur {total, number, ::group-off}",
|
|
45104
46052
|
"ui.mesh.mesh_card.device_details": "Détails de {device}",
|
|
45105
46053
|
"ui.mesh.mesh_card.memberships": "Appartenances",
|
|
45106
|
-
"ui.mesh.mesh_card.revoked": " · révoquée",
|
|
45107
46054
|
"ui.mesh.mesh_card.remove_from": "Supprimer de ",
|
|
45108
46055
|
"ui.mesh.mesh_card.conversations": "Conversations ",
|
|
45109
46056
|
"ui.mesh.mesh_card.this_device_did_not_report_its_conversations": "Cet appareil n’a pas signalé ses conversations.",
|
|
@@ -45162,8 +46109,8 @@ const frUiMesh = {
|
|
|
45162
46109
|
"ui.mesh.mesh_list.on_device_no_answer": "sur {device} (sans réponse)",
|
|
45163
46110
|
"ui.mesh.mesh_list.sort_devices_by": "Trier les appareils par",
|
|
45164
46111
|
"ui.mesh.mesh_list.epoch": "époque {epoch, number, ::group-off}",
|
|
45165
|
-
"ui.mesh.mesh_list.revoked_count": "
|
|
45166
|
-
"ui.mesh.mesh_list.
|
|
46112
|
+
"ui.mesh.mesh_list.revoked_count": "{count, plural, one {{count, number, ::group-off} révoqué} many {{count, number, ::group-off} révoqués} other {{count, number, ::group-off} révoqués}}",
|
|
46113
|
+
"ui.mesh.mesh_list.revoked_toggle_label": "Afficher les appartenances révoquées",
|
|
45167
46114
|
"ui.mesh.mesh_list.member": "membre",
|
|
45168
46115
|
"ui.mesh.mesh_list.move_conversation": "Déplacer {conversation}",
|
|
45169
46116
|
"ui.mesh.mesh_list.show_all_panel": "afficher {count, plural, one {{count, number, ::group-off} conversation dans le panneau} many {les {count, number, ::group-off} conversations dans le panneau} other {les {count, number, ::group-off} conversations dans le panneau}}",
|
|
@@ -47574,6 +48521,19 @@ const hiUiCanvas = {
|
|
|
47574
48521
|
"ui.canvas.files.prepareError": "इस कार्रवाई के लिए स्थानीय कॉपी तैयार नहीं हो सकी",
|
|
47575
48522
|
"ui.canvas.files.pathCopyNote": "खोलने, फ़ोल्डर और पाथ की कार्रवाइयाँ इस बातचीत के स्क्रैचपैड में एक स्थानीय कॉपी बनाती हैं।"
|
|
47576
48523
|
};
|
|
48524
|
+
const hiUiChatAnalytics = {
|
|
48525
|
+
"ui.chat.analytics.filters.top_level_only": "सिर्फ़ शीर्ष-स्तरीय सत्र",
|
|
48526
|
+
"ui.chat.analytics.search.clear": "खोज साफ़ करें",
|
|
48527
|
+
"ui.chat.analytics.search.sessions": "सत्र खोजें",
|
|
48528
|
+
"ui.chat.analytics.sections.by_channel": "चैनल के अनुसार",
|
|
48529
|
+
"ui.chat.analytics.sections.by_model": "मॉडल के अनुसार",
|
|
48530
|
+
"ui.chat.analytics.sections.by_provider": "प्रोवाइडर के अनुसार",
|
|
48531
|
+
"ui.chat.analytics.sections.by_session": "सत्र के अनुसार",
|
|
48532
|
+
"ui.chat.analytics.sections.totals": "कुल",
|
|
48533
|
+
"ui.chat.analytics.title": "विश्लेषण",
|
|
48534
|
+
"ui.chat.analytics.toolbar.refreshing": "रीफ़्रेश हो रहा है",
|
|
48535
|
+
"ui.chat.analytics.toolbar.this_session_only": "सिर्फ़ यह सत्र"
|
|
48536
|
+
};
|
|
47577
48537
|
const hiUiChatAsks = {
|
|
47578
48538
|
"ui.chat.asks.context.messages_since": "{count, plural, one {इस सवाल के बाद से आपका # संदेश} other {इस सवाल के बाद से आपके # संदेश}} (अंतिम संदेश {time})",
|
|
47579
48539
|
"ui.chat.asks.dismiss.answered_in_chat.note": "आप बातचीत में पहले ही जवाब दे चुके हैं",
|
|
@@ -47602,6 +48562,41 @@ const hiUiChatAttachments = {
|
|
|
47602
48562
|
"ui.chat.attachments.saved_path_copied": "सहेजी गई प्रति का पाथ कॉपी हो गया",
|
|
47603
48563
|
"ui.chat.attachments.saved_copy_label": "सहेजी गई प्रति"
|
|
47604
48564
|
};
|
|
48565
|
+
const hiUiChatCanonical = {
|
|
48566
|
+
"ui.chat.canonical.sound.batch_attachment_unavailable": "ऑडियो अटैचमेंट उपलब्ध नहीं है।",
|
|
48567
|
+
"ui.chat.canonical.sound.player_failed": "यह साउंड नहीं बजाया जा सका",
|
|
48568
|
+
"ui.chat.canonical.sound.stop.confirm_label": "रोकने के अनुरोध की पुष्टि",
|
|
48569
|
+
"ui.chat.canonical.sound.stop.keep_waiting": "इंतज़ार जारी रखें",
|
|
48570
|
+
"ui.chat.canonical.sound.stop.question": "यह जनरेशन रोकें?",
|
|
48571
|
+
"ui.chat.canonical.sound.stop.request_stop": "रोकने का अनुरोध करें",
|
|
48572
|
+
"ui.chat.canonical.sound.stop.warning": "प्रोवाइडर के पास रद्द करने का कोई endpoint नहीं है। जनरेशन जारी रहेगा और ऑडियो बनने पर उसका शुल्क लगेगा। रोकने की कोशिश की जाएगी, लेकिन रद्द होने या शुल्क न लगने की गारंटी नहीं है।",
|
|
48573
|
+
"ui.chat.canonical.supplement.adjust_placeholder": "ग्राफ़िक में बदलाव करें…",
|
|
48574
|
+
"ui.chat.canonical.supplement.details.attempts": "प्रयास: {count, number, ::group-off}",
|
|
48575
|
+
"ui.chat.canonical.supplement.details.model": "मॉडल: {name}",
|
|
48576
|
+
"ui.chat.canonical.supplement.file_actions.open_in_canvas": "Canvas में खोलें",
|
|
48577
|
+
"ui.chat.canonical.supplement.file_actions.open_in_default_app": "डिफ़ॉल्ट ऐप में खोलें",
|
|
48578
|
+
"ui.chat.canonical.supplement.file_actions.reveal_in_finder": "Finder में दिखाएँ",
|
|
48579
|
+
"ui.chat.canonical.supplement.frame.failed": "यह ग्राफ़िक रेंडर नहीं हो सका",
|
|
48580
|
+
"ui.chat.canonical.supplement.frame.loading": "ग्राफ़िक लोड हो रहा है…",
|
|
48581
|
+
"ui.chat.canonical.supplement.frame.source": "स्रोत: {name}",
|
|
48582
|
+
"ui.chat.canonical.supplement.preview_unavailable": "इनलाइन प्रीव्यू उपलब्ध नहीं है। इस HTML को असमर्थित संसाधन या दस्तावेज़ कंटेंट चाहिए। देखने के लिए फ़ाइल खोलें।",
|
|
48583
|
+
"ui.chat.canonical.supplement.send": "भेजें",
|
|
48584
|
+
"ui.chat.canonical.transcript.connect_provider": "प्रोवाइडर कनेक्ट करें",
|
|
48585
|
+
"ui.chat.canonical.transcript.credential_lost": "इस उत्तर में बताया क्रेडेंशियल अब सत्र के पास नहीं है।",
|
|
48586
|
+
"ui.chat.canonical.transcript.edit": "संपादित करें",
|
|
48587
|
+
"ui.chat.canonical.transcript.missing_session": "यह बातचीत अब इस मशीन पर नहीं है।",
|
|
48588
|
+
"ui.chat.canonical.transcript.missing_session_detail": "इसे हटा दिया गया है, या यह किसी ऐसी मशीन की है जिससे यह ऐप कनेक्ट नहीं है।",
|
|
48589
|
+
"ui.chat.canonical.transcript.reconnect": "फिर कनेक्ट करें",
|
|
48590
|
+
"ui.chat.canonical.transcript.reconnecting": "फिर कनेक्ट हो रहा है",
|
|
48591
|
+
"ui.chat.canonical.transcript.send_again": "फिर भेजें",
|
|
48592
|
+
"ui.chat.canonical.transcript.source_unavailable": "यह बातचीत पढ़ी जा सकती है, लेकिन अभी स्रोत से उसके संदेशों के क्रम की पुष्टि नहीं हो सकी।",
|
|
48593
|
+
"ui.chat.canonical.transcript.stale_caption": "अंतिम सहेजा दृश्य दिखाया जा रहा है — नए संदेशों की जाँच हो रही है।",
|
|
48594
|
+
"ui.chat.canonical.transcript.start_new_chat": "नई चैट शुरू करें",
|
|
48595
|
+
"ui.chat.canonical.transcript.stopped_before_finishing": "उत्तर पूरा होने से पहले रोक दिया गया"
|
|
48596
|
+
};
|
|
48597
|
+
const hiUiChatCommentaryActions = {
|
|
48598
|
+
"ui.chat.commentary_actions.label": "टिप्पणी की कार्रवाइयाँ"
|
|
48599
|
+
};
|
|
47605
48600
|
const hiUiChatComposer = {
|
|
47606
48601
|
"ui.chat.composer.clear_message": "संदेश मिटाएँ",
|
|
47607
48602
|
"ui.chat.composer.message": "संदेश",
|
|
@@ -47620,6 +48615,8 @@ const hiUiChatComposer = {
|
|
|
47620
48615
|
"ui.chat.composer.starting_recording": "रिकॉर्डिंग शुरू हो रही है",
|
|
47621
48616
|
"ui.chat.composer.start_recording_hint": "रिकॉर्डिंग शुरू करें ({shortcut} या {pushToTalk} दबाए रखें)",
|
|
47622
48617
|
"ui.chat.composer.processing_audio": "ऑडियो प्रोसेस हो रहा है",
|
|
48618
|
+
"ui.chat.composer.dictation_failed_transient": "डिक्टेशन विफल: ट्रांसक्रिप्शन सेवा में अस्थायी खराबी आई। फिर कोशिश करें।",
|
|
48619
|
+
"ui.chat.composer.dictation_failed_transient_take_kept": "डिक्टेशन विफल: ट्रांसक्रिप्शन सेवा में अस्थायी खराबी आई। आपकी रिकॉर्डिंग सुरक्षित है — “फिर कोशिश करें” उसे दोबारा भेज देता है।",
|
|
47623
48620
|
"ui.chat.composer.welcome": "आज मैं आपकी किस काम में मदद करूँ?",
|
|
47624
48621
|
"ui.chat.composer.delivery_remedies_hint": "जो संदेश नहीं पहुँचा, उसके फिर भेजें और संपादित करें बटन इस बॉक्स के ऊपर बातचीत में हैं: उन तक पहुँचने के लिए Shift+Tab दबाएँ।",
|
|
47625
48622
|
"ui.chat.composer.secret_ask_notice": "एजेंट कोई गोपनीय जानकारी माँग रहा है। इसे सवालों के पैनल में दर्ज करें — इस बीच आप चैट जारी रख सकते हैं।",
|
|
@@ -47681,9 +48678,94 @@ const hiUiChatLiveUpdates = {
|
|
|
47681
48678
|
"ui.chat.live_updates.reloading": "फिर से लोड हो रहा है…",
|
|
47682
48679
|
"ui.chat.live_updates.reload_failed": "यह बातचीत फिर से लोड नहीं हो सकी। फिर कोशिश करें।"
|
|
47683
48680
|
};
|
|
48681
|
+
const hiUiChatPickers = {
|
|
48682
|
+
"ui.chat.pickers.approvals.title": "टूल स्वीकृतियाँ",
|
|
48683
|
+
"ui.chat.pickers.commands.title": "कमांड",
|
|
48684
|
+
"ui.chat.pickers.copy.title": "कॉपी करें",
|
|
48685
|
+
"ui.chat.pickers.credential.forget": "भुलाएँ",
|
|
48686
|
+
"ui.chat.pickers.credential.forget_confirmation": "इस सत्र से {name} भुलाएँ",
|
|
48687
|
+
"ui.chat.pickers.credential.title": "क्रेडेंशियल",
|
|
48688
|
+
"ui.chat.pickers.effort.title": "तर्क का प्रयास",
|
|
48689
|
+
"ui.chat.pickers.fast.premium_acknowledgement": "मुझे समझ है कि फ़ास्ट मोड में प्रति टोकन लागत ज़्यादा हो सकती है",
|
|
48690
|
+
"ui.chat.pickers.fast.title": "फ़ास्ट मोड",
|
|
48691
|
+
"ui.chat.pickers.fork.search_placeholder": "कोई दूसरा तरीका आज़माएँ...",
|
|
48692
|
+
"ui.chat.pickers.goal.clear": "लक्ष्य मिटाएँ",
|
|
48693
|
+
"ui.chat.pickers.goal.mark_done": "पूरा चिह्नित करें",
|
|
48694
|
+
"ui.chat.pickers.goal.placeholder": "सभी जाँचें पास करके रिलीज़ करें",
|
|
48695
|
+
"ui.chat.pickers.goal.title": "सत्र का लक्ष्य",
|
|
48696
|
+
"ui.chat.pickers.login.title": "प्रोवाइडर में साइन इन करें",
|
|
48697
|
+
"ui.chat.pickers.logout.confirm": "इस खाते का सहेजा क्रेडेंशियल हटाएँ",
|
|
48698
|
+
"ui.chat.pickers.logout.title": "साइन आउट करें",
|
|
48699
|
+
"ui.chat.pickers.loop.cancel": "लूप रद्द करें",
|
|
48700
|
+
"ui.chat.pickers.loop.title": "लूप",
|
|
48701
|
+
"ui.chat.pickers.models.connect_provider": "प्रोवाइडर कनेक्ट करें",
|
|
48702
|
+
"ui.chat.pickers.models.native_details": "नेटिव विवरण — {name}",
|
|
48703
|
+
"ui.chat.pickers.models.set_as_default": "मौजूदा मॉडल को डिफ़ॉल्ट बनाएँ",
|
|
48704
|
+
"ui.chat.pickers.models.title": "मॉडल",
|
|
48705
|
+
"ui.chat.pickers.new_session.title": "नई बातचीत",
|
|
48706
|
+
"ui.chat.pickers.profile.loading_detail": "विवरण लोड हो रहा है",
|
|
48707
|
+
"ui.chat.pickers.reload.title": "यह बातचीत फिर लोड करें",
|
|
48708
|
+
"ui.chat.pickers.rename.title": "बातचीत का नाम बदलें",
|
|
48709
|
+
"ui.chat.pickers.resume.title": "बातचीत जारी रखें",
|
|
48710
|
+
"ui.chat.pickers.skills.loading": "लोड हो रहा है",
|
|
48711
|
+
"ui.chat.pickers.skills.title": "कौशल",
|
|
48712
|
+
"ui.chat.pickers.stop.all_sessions": "सभी सत्र ({count, number, ::group-off})",
|
|
48713
|
+
"ui.chat.pickers.stop.confirm": "अभी {count, plural, =0 {{count, number, ::group-off} सत्र को} one {इस सत्र को} other {{count, number, ::group-off} सत्रों को}} रोकें",
|
|
48714
|
+
"ui.chat.pickers.stop.title": "रोकें",
|
|
48715
|
+
"ui.chat.pickers.theme.title": "थीम"
|
|
48716
|
+
};
|
|
47684
48717
|
const hiUiChatResponseActions = {
|
|
47685
48718
|
"ui.chat.response_actions.label": "प्रतिक्रिया की कार्रवाइयाँ"
|
|
47686
48719
|
};
|
|
48720
|
+
const hiUiChatRunDetails = {
|
|
48721
|
+
"ui.chat.run_details.jobs": "जॉब्स",
|
|
48722
|
+
"ui.chat.run_details.keep": "चलने दें"
|
|
48723
|
+
};
|
|
48724
|
+
const hiUiChatSidebar = {
|
|
48725
|
+
"ui.chat.sidebar.agents.clear_filter": "एजेंट फ़िल्टर साफ़ करें",
|
|
48726
|
+
"ui.chat.sidebar.agents.create": "एजेंट बनाएँ",
|
|
48727
|
+
"ui.chat.sidebar.agents.dismiss_offer": "अंतर्निहित एजेंटों का सुझाव हटाएँ",
|
|
48728
|
+
"ui.chat.sidebar.agents.empty": "अभी कोई एजेंट नहीं",
|
|
48729
|
+
"ui.chat.sidebar.agents.filter": "एजेंट फ़िल्टर करें",
|
|
48730
|
+
"ui.chat.sidebar.agents.loading": "एजेंट लोड हो रहे हैं…",
|
|
48731
|
+
"ui.chat.sidebar.agents.no_match": "कोई एजेंट मेल नहीं खाता",
|
|
48732
|
+
"ui.chat.sidebar.drafts.clear_all": "सभी मिटाएँ",
|
|
48733
|
+
"ui.chat.sidebar.drafts.clear_all_label": "सभी ड्राफ़्ट मिटाएँ",
|
|
48734
|
+
"ui.chat.sidebar.header.create": "नया एजेंट या नई टीम",
|
|
48735
|
+
"ui.chat.sidebar.header.create_agent": "नया एजेंट",
|
|
48736
|
+
"ui.chat.sidebar.header.create_team": "नई टीम",
|
|
48737
|
+
"ui.chat.sidebar.header.open_agent": "एजेंट खोलें…",
|
|
48738
|
+
"ui.chat.sidebar.header.search": "चैट और एजेंट खोजें",
|
|
48739
|
+
"ui.chat.sidebar.header.view_options": "दृश्य विकल्प",
|
|
48740
|
+
"ui.chat.sidebar.list.connecting": "चैट से कनेक्ट हो रहा है…",
|
|
48741
|
+
"ui.chat.sidebar.list.empty": "अभी कोई चैट नहीं। कोई एजेंट, टीम या नई चैट चुनें।",
|
|
48742
|
+
"ui.chat.sidebar.list.loading_more": "और चैट लोड हो रही हैं…",
|
|
48743
|
+
"ui.chat.sidebar.list.offline": "बैकएंड से कनेक्ट नहीं है — अंतिम ज्ञात स्थिति दिखाई जा रही है।",
|
|
48744
|
+
"ui.chat.sidebar.list.retry_refresh": "फिर रीफ़्रेश करें",
|
|
48745
|
+
"ui.chat.sidebar.list.truncated_legacy": "अधिकतम 500 चैट दिखाई जा रही हैं। पुरानी चैट टर्मिनल में उपलब्ध हैं।",
|
|
48746
|
+
"ui.chat.sidebar.nav.chats": "चैट",
|
|
48747
|
+
"ui.chat.sidebar.pins.drag_title": "क्रम बदलने के लिए खींचें · Esc से रद्द करें",
|
|
48748
|
+
"ui.chat.sidebar.pins.failure": "{action, select, pin {“{title}” पिन नहीं की जा सकी।} unpin {“{title}” अनपिन नहीं की जा सकी।} other {“{title}” अपडेट नहीं की जा सकी।}}",
|
|
48749
|
+
"ui.chat.sidebar.row.archived_suffix": ", संग्रहित",
|
|
48750
|
+
"ui.chat.sidebar.row.in_conversation": "बातचीत में",
|
|
48751
|
+
"ui.chat.sidebar.row.matched_in_conversation": ", बातचीत में मिला",
|
|
48752
|
+
"ui.chat.sidebar.row.not_sent": "अभी नहीं भेजा गया",
|
|
48753
|
+
"ui.chat.sidebar.row_menu.copy_id": "सत्र ID कॉपी करें",
|
|
48754
|
+
"ui.chat.sidebar.row_menu.fork": "बातचीत फ़ोर्क करें",
|
|
48755
|
+
"ui.chat.sidebar.row_menu.move_down": "बातचीत नीचे ले जाएँ",
|
|
48756
|
+
"ui.chat.sidebar.row_menu.move_up": "बातचीत ऊपर ले जाएँ",
|
|
48757
|
+
"ui.chat.sidebar.row_menu.rename": "बातचीत का नाम बदलें",
|
|
48758
|
+
"ui.chat.sidebar.search.clear": "खोज साफ़ करें",
|
|
48759
|
+
"ui.chat.sidebar.search.include_archived": "संग्रहित भी शामिल करें",
|
|
48760
|
+
"ui.chat.sidebar.search.names_only": "सिर्फ़ चैट के नाम खोजे जा रहे हैं। बातचीत के अंदर खोजने के लिए Local Operator अपडेट करें।",
|
|
48761
|
+
"ui.chat.sidebar.search.no_match": "आपकी चैट में “{query}” से कोई परिणाम नहीं मिला।",
|
|
48762
|
+
"ui.chat.sidebar.search.placeholder": "चैट और एजेंट फ़िल्टर करें",
|
|
48763
|
+
"ui.chat.sidebar.search.searching": "बातचीतें खोजी जा रही हैं…",
|
|
48764
|
+
"ui.chat.sidebar.search.too_long": "खोज में अधिकतम {max, number, ::group-off} अक्षर हो सकते हैं। यह खोज लंबी है, इसलिए सिर्फ़ चैट के नाम खोजे जा रहे हैं।",
|
|
48765
|
+
"ui.chat.sidebar.search.unavailable": "बातचीत खोज उपलब्ध नहीं है, इसलिए ये परिणाम नामों के मिलान हैं।",
|
|
48766
|
+
"ui.chat.sidebar.teams.create": "टीम बनाएँ",
|
|
48767
|
+
"ui.chat.sidebar.teams.loading": "टीमें लोड हो रही हैं…"
|
|
48768
|
+
};
|
|
47687
48769
|
const hiUiChatSidebarView = {
|
|
47688
48770
|
"ui.chat.sidebar_view.group_by": "समूह बनाएँ",
|
|
47689
48771
|
"ui.chat.sidebar_view.time_basis": "समय का आधार",
|
|
@@ -47708,6 +48790,12 @@ const hiUiChatSidebarView = {
|
|
|
47708
48790
|
"ui.chat.sidebar_view.section.agents": "एजेंट",
|
|
47709
48791
|
"ui.chat.sidebar_view.section.teams": "टीमें"
|
|
47710
48792
|
};
|
|
48793
|
+
const hiUiChatTagDialogs = {
|
|
48794
|
+
"ui.chat.tag_dialogs.deleted_name": "“{name}” हटाया गया",
|
|
48795
|
+
"ui.chat.tag_dialogs.created_assigned": "“{name}” बनाकर इस बातचीत में जोड़ दिया गया",
|
|
48796
|
+
"ui.chat.tag_dialogs.assign_created_failed": "“{name}” बन गया, लेकिन इसे इस बातचीत में नहीं जोड़ा जा सका। जोड़ने के लिए सूची से इसे चुनें।",
|
|
48797
|
+
"ui.chat.tag_dialogs.changed_elsewhere": "टैग कहीं और बदले गए। सूची अब इस बातचीत के मौजूदा टैग दिखा रही है; अपना बदलाव लागू करने के लिए फिर चुनें।"
|
|
48798
|
+
};
|
|
47711
48799
|
const hiUiChatTags = {
|
|
47712
48800
|
"ui.chat.tags.label": "टैग",
|
|
47713
48801
|
"ui.chat.tags.menu": "टैग…",
|
|
@@ -47777,6 +48865,17 @@ const hiUiChatTags = {
|
|
|
47777
48865
|
"ui.chat.tags.empty_title": "बातचीतों को टैग के अनुसार समूहों में रखें।",
|
|
47778
48866
|
"ui.chat.tags.empty_hint": "किसी बातचीत पर {chord} दबाएँ, या यहाँ टैग बनाएँ।"
|
|
47779
48867
|
};
|
|
48868
|
+
const hiUiChatTranscriptCopy = {
|
|
48869
|
+
"ui.chat.transcript_copy.menu.copy_text": "टेक्स्ट कॉपी करें",
|
|
48870
|
+
"ui.chat.transcript_copy.menu.copy_markdown": "Markdown के रूप में कॉपी करें",
|
|
48871
|
+
"ui.chat.transcript_copy.menu.copy_selection": "चयन कॉपी करें",
|
|
48872
|
+
"ui.chat.transcript_copy.toast.copied_markdown": "Markdown के रूप में कॉपी हुआ",
|
|
48873
|
+
"ui.chat.transcript_copy.toast.copied_selection": "चयन कॉपी हुआ",
|
|
48874
|
+
"ui.chat.transcript_copy.row.your_message": "आपका संदेश",
|
|
48875
|
+
"ui.chat.transcript_copy.row.agent_message": "एजेंट का संदेश",
|
|
48876
|
+
"ui.chat.transcript_copy.selection.copy": "चयन कॉपी करें",
|
|
48877
|
+
"ui.chat.transcript_copy.selection.toolbar": "चयन की कार्रवाइयाँ"
|
|
48878
|
+
};
|
|
47780
48879
|
const hiUiCodeReview = {
|
|
47781
48880
|
"ui.code_review.activity.close": "बंद किया",
|
|
47782
48881
|
"ui.code_review.activity.comment": "टिप्पणी की",
|
|
@@ -47931,6 +49030,26 @@ const hiUiCommandPalette = {
|
|
|
47931
49030
|
"ui.command_palette.use_palette_sources.team_chat": "टीम चैट",
|
|
47932
49031
|
"ui.command_palette.use_palette_sources.usage_over_time": "समय के साथ उपयोग"
|
|
47933
49032
|
};
|
|
49033
|
+
const hiUiCommonAccount = {
|
|
49034
|
+
"ui.common.account.low_credits_dialog.could_not_load_bonus_credit_information": "बोनस क्रेडिट की जानकारी लोड नहीं हो सकी।",
|
|
49035
|
+
"ui.common.account.low_credits_dialog.detail": "${detail} USD",
|
|
49036
|
+
"ui.common.account.low_credits_dialog.get_more_credits": "और क्रेडिट लें",
|
|
49037
|
+
"ui.common.account.low_credits_dialog.in_bonus_credits_with_your_first_purchase": "बोनस क्रेडिट पाएँ।",
|
|
49038
|
+
"ui.common.account.low_credits_dialog.it_s_pay_as_you_go_with_no_commitments_load_up_what_you_need_star": "यह जितना इस्तेमाल, उतना भुगतान की सुविधा है, बिना किसी प्रतिबद्धता के। ज़रूरत के हिसाब से क्रेडिट लें — ज़्यादा सुविधा के लिए छोटी शुरुआत करें।",
|
|
49039
|
+
"ui.common.account.low_credits_dialog.maybe_later": "शायद बाद में",
|
|
49040
|
+
"ui.common.account.low_credits_dialog.plus_get": "साथ ही, पहली खरीद पर",
|
|
49041
|
+
"ui.common.account.low_credits_dialog.radient_automatic_is_often_cheaper_than_bringing_your_own_key_its": "अपनी कुंजी इस्तेमाल करने के मुकाबले Radient Automatic अक्सर सस्ता पड़ता है: इसकी स्मार्ट मॉडल राउटिंग आपके एजेंटिक वर्कफ़्लो के हर चरण के लिए सबसे किफ़ायती मॉडल चुनती है।",
|
|
49042
|
+
"ui.common.account.low_credits_dialog.radient_icon": "Radient आइकॉन",
|
|
49043
|
+
"ui.common.account.low_credits_dialog.radient_pass": "Radient Pass",
|
|
49044
|
+
"ui.common.account.low_credits_dialog.running_low_on_radient_credits": "Radient क्रेडिट कम हो रहे हैं?",
|
|
49045
|
+
"ui.common.account.low_credits_dialog.unlock_the_full_power_of_local_operator_with": "Local Operator की पूरी क्षमता अनलॉक करने के लिए:",
|
|
49046
|
+
"ui.common.account.low_credits_dialog.you_can_also_reach_the_radient_console_from_settings_at_any_time": "आप सेटिंग्स से भी कभी भी Radient कंसोल पर जा सकते हैं।",
|
|
49047
|
+
"ui.common.account.radient_auth_buttons.connect_your_radient_account_to_use_radient_services": "Radient सेवाएँ इस्तेमाल करने के लिए अपना Radient खाता कनेक्ट करें।",
|
|
49048
|
+
"ui.common.account.radient_auth_buttons.loading_sign_in_options": "साइन-इन विकल्प लोड हो रहे हैं",
|
|
49049
|
+
"ui.common.account.radient_auth_buttons.radient_is_not_available_from_this_backend_s_provider_registry": "इस बैकएंड की प्रोवाइडर रजिस्ट्री में Radient उपलब्ध नहीं है।",
|
|
49050
|
+
"ui.common.account.radient_auth_buttons.sign_in_to_radient": "Radient में साइन इन करें",
|
|
49051
|
+
"ui.common.account.radient_auth_buttons.signing_in_needs_a_newer_local_operator_backend_update_the_backen": "साइन इन करने के लिए Local Operator का नया बैकएंड चाहिए। बैकएंड अपडेट करें और ऐप फिर शुरू करें।"
|
|
49052
|
+
};
|
|
47934
49053
|
const hiUiCommonActions = {
|
|
47935
49054
|
"ui.common.actions.cancel": "रद्द करें",
|
|
47936
49055
|
"ui.common.actions.close": "बंद करें",
|
|
@@ -47962,6 +49081,13 @@ const hiUiCommonErrors = {
|
|
|
47962
49081
|
"ui.common.errors.error_boundary.stack_trace": "स्टैक ट्रेस",
|
|
47963
49082
|
"ui.common.errors.error_boundary.the_application_encountered_an_error_try_again_or_contact_support": "ऐप में कोई त्रुटि हुई। फिर कोशिश करें, या समस्या बनी रहे तो सहायता से संपर्क करें।"
|
|
47964
49083
|
};
|
|
49084
|
+
const hiUiCommonFileActions = {
|
|
49085
|
+
"ui.common.file_actions.copy_file_path": "फ़ाइल पाथ कॉपी करें",
|
|
49086
|
+
"ui.common.file_actions.open_file": "फ़ाइल खोलें",
|
|
49087
|
+
"ui.common.file_actions.open_folder": "फ़ोल्डर खोलें",
|
|
49088
|
+
"ui.common.file_actions.preview": "प्रीव्यू",
|
|
49089
|
+
"ui.common.file_actions.show_in_canvas": "Canvas में दिखाएँ"
|
|
49090
|
+
};
|
|
47965
49091
|
const hiUiCommonForms = {
|
|
47966
49092
|
"ui.common.forms.autocomplete_field.cancel_editing": "{label} का संपादन रद्द करें",
|
|
47967
49093
|
"ui.common.forms.autocomplete_field.enter_value": "मान दर्ज करें...",
|
|
@@ -48149,6 +49275,12 @@ const hiUiCommonUpdates = {
|
|
|
48149
49275
|
"ui.common.updates.wait.minutes_seconds": "अभी तक {minutes, plural, one {{minutes, number, ::group-off} मिनट} other {{minutes, number, ::group-off} मिनट}} {seconds, plural, one {{seconds, number, ::group-off} सेकंड} other {{seconds, number, ::group-off} सेकंड}} से इंतज़ार है",
|
|
48150
49276
|
"ui.common.updates.wait.seconds": "अभी तक {seconds, plural, one {{seconds, number, ::group-off} सेकंड} other {{seconds, number, ::group-off} सेकंड}} से इंतज़ार है"
|
|
48151
49277
|
};
|
|
49278
|
+
const hiUiCommonViewer = {
|
|
49279
|
+
"ui.common.viewer.opening": "खोला जा रहा है…",
|
|
49280
|
+
"ui.common.viewer.reset_view": "दृश्य रीसेट करें",
|
|
49281
|
+
"ui.common.viewer.zoom_in": "ज़ूम बढ़ाएँ",
|
|
49282
|
+
"ui.common.viewer.zoom_out": "ज़ूम घटाएँ"
|
|
49283
|
+
};
|
|
48152
49284
|
const hiUiConsole = {
|
|
48153
49285
|
"ui.console.capacity.summary": "ऐप में {live, number, ::group-off} चालू, सीमा {limit, number, ::group-off}",
|
|
48154
49286
|
"ui.console.capacity.summary_compact": "{live, number, ::group-off}/{limit, number, ::group-off} · {archived, plural, one {{archived, number, ::group-off} रखा गया} other {{archived, number, ::group-off} रखे गए}}",
|
|
@@ -48740,11 +49872,9 @@ const hiUiMesh = {
|
|
|
48740
49872
|
"ui.mesh.mesh_card.move_to": "{device} पर ले जाएँ",
|
|
48741
49873
|
"ui.mesh.mesh_card.copy_to": "{device} पर कॉपी करें",
|
|
48742
49874
|
"ui.mesh.mesh_card.conversation_count": "{count, plural, one {{count, number, ::group-off} बातचीत} other {{count, number, ::group-off} बातचीतें}}",
|
|
48743
|
-
"ui.mesh.mesh_card.revoked_membership": "सदस्यता रद्द",
|
|
48744
49875
|
"ui.mesh.mesh_card.shown_of": "{shown, number, ::group-off}, कुल {total, number, ::group-off}",
|
|
48745
49876
|
"ui.mesh.mesh_card.device_details": "{device} का विवरण",
|
|
48746
49877
|
"ui.mesh.mesh_card.memberships": "सदस्यताएँ",
|
|
48747
|
-
"ui.mesh.mesh_card.revoked": " · रद्द",
|
|
48748
49878
|
"ui.mesh.mesh_card.remove_from": "नेटवर्क से हटाएँ: ",
|
|
48749
49879
|
"ui.mesh.mesh_card.conversations": "बातचीतें ",
|
|
48750
49880
|
"ui.mesh.mesh_card.this_device_did_not_report_its_conversations": "इस डिवाइस ने अपनी बातचीतों की जानकारी नहीं दी।",
|
|
@@ -48803,8 +49933,8 @@ const hiUiMesh = {
|
|
|
48803
49933
|
"ui.mesh.mesh_list.on_device_no_answer": "{device} पर (जवाब नहीं दे रहा)",
|
|
48804
49934
|
"ui.mesh.mesh_list.sort_devices_by": "डिवाइस का क्रम तय करें",
|
|
48805
49935
|
"ui.mesh.mesh_list.epoch": "सदस्यता epoch {epoch, number, ::group-off}",
|
|
48806
|
-
"ui.mesh.mesh_list.revoked_count": "
|
|
48807
|
-
"ui.mesh.mesh_list.
|
|
49936
|
+
"ui.mesh.mesh_list.revoked_count": "{count, plural, other {{count, number, ::group-off} रद्द}}",
|
|
49937
|
+
"ui.mesh.mesh_list.revoked_toggle_label": "रद्द की गई सदस्यताएँ दिखाएँ",
|
|
48808
49938
|
"ui.mesh.mesh_list.member": "सदस्य",
|
|
48809
49939
|
"ui.mesh.mesh_list.move_conversation": "{conversation} को ले जाएँ",
|
|
48810
49940
|
"ui.mesh.mesh_list.show_all_panel": "पैनल में सभी {count, plural, other {{count, number, ::group-off} दिखाएँ}}",
|
|
@@ -48926,6 +50056,17 @@ const hiUiOnboarding = {
|
|
|
48926
50056
|
"ui.onboarding.modal.step_of": "चरण {current, number, ::group-off}, कुल {total, number, ::group-off}",
|
|
48927
50057
|
"ui.onboarding.modal.steps_total": "{total, plural, one {{total, number, ::group-off} चरण} other {{total, number, ::group-off} चरण}}"
|
|
48928
50058
|
};
|
|
50059
|
+
const hiUiPresence = {
|
|
50060
|
+
"ui.presence.unknown": "अज्ञात",
|
|
50061
|
+
"ui.presence.link_down_last_seen": "लिंक डाउन · अंतिम संपर्क {age}",
|
|
50062
|
+
"ui.presence.device_link_down": "लिंक डाउन · {reason} · अंतिम संपर्क {age}",
|
|
50063
|
+
"ui.presence.device_unreachable": "डिवाइस तक पहुँचा नहीं जा सका",
|
|
50064
|
+
"ui.presence.just_now": "अभी-अभी",
|
|
50065
|
+
"ui.presence.minutes_ago": "{count, number} मि. पहले",
|
|
50066
|
+
"ui.presence.hours_ago": "{count, number} घं. पहले",
|
|
50067
|
+
"ui.presence.days_ago": "{count, number} दिन पहले",
|
|
50068
|
+
"ui.presence.link_down_compact": "लिंक डाउन · {age}"
|
|
50069
|
+
};
|
|
48929
50070
|
const hiUiProjects = {
|
|
48930
50071
|
"ui.projects.board_window_select.projects_updated_within": "प्रोजेक्ट अपडेट अवधि",
|
|
48931
50072
|
"ui.projects.board_window_select.shows_projects_last_updated_within_this_window_older_ones_are_hid": "इस समयावधि में आख़िरी बार अपडेट हुए प्रोजेक्ट दिखाता है; पुराने प्रोजेक्ट छिपे रहते हैं।",
|
|
@@ -51204,6 +52345,19 @@ const ruUiCanvas = {
|
|
|
51204
52345
|
"ui.canvas.files.videos": "Видео",
|
|
51205
52346
|
"ui.canvas.files.working": "Рабочие файлы"
|
|
51206
52347
|
};
|
|
52348
|
+
const ruUiChatAnalytics = {
|
|
52349
|
+
"ui.chat.analytics.filters.top_level_only": "Только сессии верхнего уровня",
|
|
52350
|
+
"ui.chat.analytics.search.clear": "Очистить поиск",
|
|
52351
|
+
"ui.chat.analytics.search.sessions": "Поиск сессий",
|
|
52352
|
+
"ui.chat.analytics.sections.by_channel": "По каналам",
|
|
52353
|
+
"ui.chat.analytics.sections.by_model": "По моделям",
|
|
52354
|
+
"ui.chat.analytics.sections.by_provider": "По провайдерам",
|
|
52355
|
+
"ui.chat.analytics.sections.by_session": "По сессиям",
|
|
52356
|
+
"ui.chat.analytics.sections.totals": "Итого",
|
|
52357
|
+
"ui.chat.analytics.title": "Аналитика",
|
|
52358
|
+
"ui.chat.analytics.toolbar.refreshing": "Обновление",
|
|
52359
|
+
"ui.chat.analytics.toolbar.this_session_only": "Только эта сессия"
|
|
52360
|
+
};
|
|
51207
52361
|
const ruUiChatAsks = {
|
|
51208
52362
|
"ui.chat.asks.context.messages_since": "{count, plural, one {# сообщение от вас с момента этого запроса} few {# сообщения от вас с момента этого запроса} many {# сообщений от вас с момента этого запроса} other {# сообщения от вас с момента этого запроса}} (последнее сообщение: {time})",
|
|
51209
52363
|
"ui.chat.asks.dismiss.answered_in_chat.note": "вы уже ответили в чате",
|
|
@@ -51232,6 +52386,41 @@ const ruUiChatAttachments = {
|
|
|
51232
52386
|
"ui.chat.attachments.saved_path_copied": "Путь сохранённой копии скопирован",
|
|
51233
52387
|
"ui.chat.attachments.saved_copy_label": "Сохранённая копия"
|
|
51234
52388
|
};
|
|
52389
|
+
const ruUiChatCanonical = {
|
|
52390
|
+
"ui.chat.canonical.sound.batch_attachment_unavailable": "Аудиовложение недоступно.",
|
|
52391
|
+
"ui.chat.canonical.sound.player_failed": "Не удалось воспроизвести звук",
|
|
52392
|
+
"ui.chat.canonical.sound.stop.confirm_label": "Подтверждение запроса на остановку",
|
|
52393
|
+
"ui.chat.canonical.sound.stop.keep_waiting": "Ждать дальше",
|
|
52394
|
+
"ui.chat.canonical.sound.stop.question": "Остановить генерацию?",
|
|
52395
|
+
"ui.chat.canonical.sound.stop.request_stop": "Запросить остановку",
|
|
52396
|
+
"ui.chat.canonical.sound.stop.warning": "У провайдера нет endpoint для отмены. Генерация продолжится, и если она создаст аудио, за него будет взиматься плата. Остановка выполняется по возможности и не гарантирует отмену или отсутствие платы.",
|
|
52397
|
+
"ui.chat.canonical.supplement.adjust_placeholder": "Изменить графику…",
|
|
52398
|
+
"ui.chat.canonical.supplement.details.attempts": "Попыток: {count, number, ::group-off}",
|
|
52399
|
+
"ui.chat.canonical.supplement.details.model": "Модель: {name}",
|
|
52400
|
+
"ui.chat.canonical.supplement.file_actions.open_in_canvas": "Открыть в Canvas",
|
|
52401
|
+
"ui.chat.canonical.supplement.file_actions.open_in_default_app": "Открыть в приложении по умолчанию",
|
|
52402
|
+
"ui.chat.canonical.supplement.file_actions.reveal_in_finder": "Показать в Finder",
|
|
52403
|
+
"ui.chat.canonical.supplement.frame.failed": "Не удалось отобразить графику",
|
|
52404
|
+
"ui.chat.canonical.supplement.frame.loading": "Загрузка графики…",
|
|
52405
|
+
"ui.chat.canonical.supplement.frame.source": "Источник: {name}",
|
|
52406
|
+
"ui.chat.canonical.supplement.preview_unavailable": "Встроенный предпросмотр недоступен. Этот HTML использует неподдерживаемые ресурсы или содержимое документа. Откройте файл, чтобы просмотреть его.",
|
|
52407
|
+
"ui.chat.canonical.supplement.send": "Отправить",
|
|
52408
|
+
"ui.chat.canonical.transcript.connect_provider": "Подключить провайдера",
|
|
52409
|
+
"ui.chat.canonical.transcript.credential_lost": "В сессии больше нет учётных данных, указанных в этом ответе.",
|
|
52410
|
+
"ui.chat.canonical.transcript.edit": "Изменить",
|
|
52411
|
+
"ui.chat.canonical.transcript.missing_session": "Этого разговора больше нет на этом устройстве.",
|
|
52412
|
+
"ui.chat.canonical.transcript.missing_session_detail": "Он был удалён или принадлежит устройству, к которому это приложение не подключено.",
|
|
52413
|
+
"ui.chat.canonical.transcript.reconnect": "Переподключиться",
|
|
52414
|
+
"ui.chat.canonical.transcript.reconnecting": "Переподключение",
|
|
52415
|
+
"ui.chat.canonical.transcript.send_again": "Отправить снова",
|
|
52416
|
+
"ui.chat.canonical.transcript.source_unavailable": "Разговор доступен для чтения, но сейчас не удалось подтвердить порядок сообщений по источнику.",
|
|
52417
|
+
"ui.chat.canonical.transcript.stale_caption": "Показана последняя сохранённая версия — идёт проверка новых сообщений.",
|
|
52418
|
+
"ui.chat.canonical.transcript.start_new_chat": "Начать новый чат",
|
|
52419
|
+
"ui.chat.canonical.transcript.stopped_before_finishing": "Остановлено до завершения"
|
|
52420
|
+
};
|
|
52421
|
+
const ruUiChatCommentaryActions = {
|
|
52422
|
+
"ui.chat.commentary_actions.label": "Действия с пояснением"
|
|
52423
|
+
};
|
|
51235
52424
|
const ruUiChatComposer = {
|
|
51236
52425
|
"ui.chat.composer.ask_aside": "Спросить отдельно",
|
|
51237
52426
|
"ui.chat.composer.attach_file": "Прикрепить файл",
|
|
@@ -51243,6 +52432,8 @@ const ruUiChatComposer = {
|
|
|
51243
52432
|
"ui.chat.composer.delivery_remedies_hint": "У недоставленного сообщения есть кнопки «Отправить снова» и «Изменить» в разговоре над этим полем: нажмите Shift+Tab, чтобы перейти к ним.",
|
|
51244
52433
|
"ui.chat.composer.message": "Сообщение",
|
|
51245
52434
|
"ui.chat.composer.processing_audio": "Обработка аудио",
|
|
52435
|
+
"ui.chat.composer.dictation_failed_transient": "Диктовка не удалась: служба транскрипции временно дала сбой. Повторите попытку.",
|
|
52436
|
+
"ui.chat.composer.dictation_failed_transient_take_kept": "Диктовка не удалась: служба транскрипции временно дала сбой. Запись сохранена — «Повторить» отправит её снова.",
|
|
51246
52437
|
"ui.chat.composer.secret_ask_notice": "Агент запрашивает секрет. Введите его на панели запросов — общаться можно параллельно.",
|
|
51247
52438
|
"ui.chat.composer.secret_ask_open": "Открыть запросы",
|
|
51248
52439
|
"ui.chat.composer.secret_confirm_cancel": "Отмена",
|
|
@@ -51311,9 +52502,94 @@ const ruUiChatLiveUpdates = {
|
|
|
51311
52502
|
"ui.chat.live_updates.reloading": "Перезагрузка…",
|
|
51312
52503
|
"ui.chat.live_updates.reload_failed": "Не удалось перезагрузить этот разговор. Повторите попытку."
|
|
51313
52504
|
};
|
|
52505
|
+
const ruUiChatPickers = {
|
|
52506
|
+
"ui.chat.pickers.approvals.title": "Одобрения инструментов",
|
|
52507
|
+
"ui.chat.pickers.commands.title": "Команды",
|
|
52508
|
+
"ui.chat.pickers.copy.title": "Копирование",
|
|
52509
|
+
"ui.chat.pickers.credential.forget": "Забыть",
|
|
52510
|
+
"ui.chat.pickers.credential.forget_confirmation": "Удалить {name} из этой сессии",
|
|
52511
|
+
"ui.chat.pickers.credential.title": "Учётные данные",
|
|
52512
|
+
"ui.chat.pickers.effort.title": "Глубина рассуждений",
|
|
52513
|
+
"ui.chat.pickers.fast.premium_acknowledgement": "Я понимаю, что в быстром режиме стоимость токена может быть выше",
|
|
52514
|
+
"ui.chat.pickers.fast.title": "Быстрый режим",
|
|
52515
|
+
"ui.chat.pickers.fork.search_placeholder": "Попробуйте другой подход…",
|
|
52516
|
+
"ui.chat.pickers.goal.clear": "Удалить цель",
|
|
52517
|
+
"ui.chat.pickers.goal.mark_done": "Отметить выполненной",
|
|
52518
|
+
"ui.chat.pickers.goal.placeholder": "Опубликовать выпуск после успешных проверок",
|
|
52519
|
+
"ui.chat.pickers.goal.title": "Цель сессии",
|
|
52520
|
+
"ui.chat.pickers.login.title": "Войти в учётную запись провайдера",
|
|
52521
|
+
"ui.chat.pickers.logout.confirm": "Удалить сохранённые учётные данные этой учётной записи",
|
|
52522
|
+
"ui.chat.pickers.logout.title": "Выйти",
|
|
52523
|
+
"ui.chat.pickers.loop.cancel": "Остановить цикл",
|
|
52524
|
+
"ui.chat.pickers.loop.title": "Цикл",
|
|
52525
|
+
"ui.chat.pickers.models.connect_provider": "Подключить провайдера",
|
|
52526
|
+
"ui.chat.pickers.models.native_details": "Сведения о модели — {name}",
|
|
52527
|
+
"ui.chat.pickers.models.set_as_default": "Установить текущую модель по умолчанию",
|
|
52528
|
+
"ui.chat.pickers.models.title": "Модель",
|
|
52529
|
+
"ui.chat.pickers.new_session.title": "Новый разговор",
|
|
52530
|
+
"ui.chat.pickers.profile.loading_detail": "Загрузка сведений",
|
|
52531
|
+
"ui.chat.pickers.reload.title": "Перезагрузить этот разговор",
|
|
52532
|
+
"ui.chat.pickers.rename.title": "Переименовать разговор",
|
|
52533
|
+
"ui.chat.pickers.resume.title": "Возобновить разговор",
|
|
52534
|
+
"ui.chat.pickers.skills.loading": "Загрузка",
|
|
52535
|
+
"ui.chat.pickers.skills.title": "Навыки",
|
|
52536
|
+
"ui.chat.pickers.stop.all_sessions": "Все сессии ({count, number, ::group-off})",
|
|
52537
|
+
"ui.chat.pickers.stop.confirm": "Остановить {count, plural, =1 {эту сессию} one {{count, number, ::group-off} сессию} few {{count, number, ::group-off} сессии} many {{count, number, ::group-off} сессий} other {{count, number, ::group-off} сессии}} сейчас",
|
|
52538
|
+
"ui.chat.pickers.stop.title": "Остановить",
|
|
52539
|
+
"ui.chat.pickers.theme.title": "Тема"
|
|
52540
|
+
};
|
|
51314
52541
|
const ruUiChatResponseActions = {
|
|
51315
52542
|
"ui.chat.response_actions.label": "Действия с ответом"
|
|
51316
52543
|
};
|
|
52544
|
+
const ruUiChatRunDetails = {
|
|
52545
|
+
"ui.chat.run_details.jobs": "Задания",
|
|
52546
|
+
"ui.chat.run_details.keep": "Оставить"
|
|
52547
|
+
};
|
|
52548
|
+
const ruUiChatSidebar = {
|
|
52549
|
+
"ui.chat.sidebar.agents.clear_filter": "Очистить фильтр агентов",
|
|
52550
|
+
"ui.chat.sidebar.agents.create": "Создать агента",
|
|
52551
|
+
"ui.chat.sidebar.agents.dismiss_offer": "Скрыть предложение встроенных агентов",
|
|
52552
|
+
"ui.chat.sidebar.agents.empty": "Агентов пока нет",
|
|
52553
|
+
"ui.chat.sidebar.agents.filter": "Фильтр агентов",
|
|
52554
|
+
"ui.chat.sidebar.agents.loading": "Загрузка агентов…",
|
|
52555
|
+
"ui.chat.sidebar.agents.no_match": "Нет подходящих агентов",
|
|
52556
|
+
"ui.chat.sidebar.drafts.clear_all": "Очистить всё",
|
|
52557
|
+
"ui.chat.sidebar.drafts.clear_all_label": "Удалить все черновики",
|
|
52558
|
+
"ui.chat.sidebar.header.create": "Создать агента или команду",
|
|
52559
|
+
"ui.chat.sidebar.header.create_agent": "Новый агент",
|
|
52560
|
+
"ui.chat.sidebar.header.create_team": "Новая команда",
|
|
52561
|
+
"ui.chat.sidebar.header.open_agent": "Открыть агента…",
|
|
52562
|
+
"ui.chat.sidebar.header.search": "Поиск чатов и агентов",
|
|
52563
|
+
"ui.chat.sidebar.header.view_options": "Параметры вида",
|
|
52564
|
+
"ui.chat.sidebar.list.connecting": "Подключение к чатам…",
|
|
52565
|
+
"ui.chat.sidebar.list.empty": "Чатов пока нет. Выберите агента, команду или «Новый чат».",
|
|
52566
|
+
"ui.chat.sidebar.list.loading_more": "Загрузка следующих…",
|
|
52567
|
+
"ui.chat.sidebar.list.offline": "Нет подключения к бэкенду — показано последнее известное состояние.",
|
|
52568
|
+
"ui.chat.sidebar.list.retry_refresh": "Повторить обновление",
|
|
52569
|
+
"ui.chat.sidebar.list.truncated_legacy": "Показано не более 500 чатов. Более ранние доступны в терминале.",
|
|
52570
|
+
"ui.chat.sidebar.nav.chats": "Чаты",
|
|
52571
|
+
"ui.chat.sidebar.pins.drag_title": "Перетащите, чтобы изменить порядок · Esc — отмена",
|
|
52572
|
+
"ui.chat.sidebar.pins.failure": "{action, select, pin {Не удалось закрепить «{title}».} unpin {Не удалось открепить «{title}».} other {Не удалось обновить «{title}».}}",
|
|
52573
|
+
"ui.chat.sidebar.row.archived_suffix": ", в архиве",
|
|
52574
|
+
"ui.chat.sidebar.row.in_conversation": "в разговоре",
|
|
52575
|
+
"ui.chat.sidebar.row.matched_in_conversation": ", совпадение в разговоре",
|
|
52576
|
+
"ui.chat.sidebar.row.not_sent": "Ещё не отправлено",
|
|
52577
|
+
"ui.chat.sidebar.row_menu.copy_id": "Копировать ID сессии",
|
|
52578
|
+
"ui.chat.sidebar.row_menu.fork": "Ответвить разговор",
|
|
52579
|
+
"ui.chat.sidebar.row_menu.move_down": "Переместить разговор вниз",
|
|
52580
|
+
"ui.chat.sidebar.row_menu.move_up": "Переместить разговор вверх",
|
|
52581
|
+
"ui.chat.sidebar.row_menu.rename": "Переименовать разговор",
|
|
52582
|
+
"ui.chat.sidebar.search.clear": "Очистить поиск",
|
|
52583
|
+
"ui.chat.sidebar.search.include_archived": "Включая архивные",
|
|
52584
|
+
"ui.chat.sidebar.search.names_only": "Поиск выполняется только по названиям чатов. Обновите Local Operator, чтобы искать внутри разговоров.",
|
|
52585
|
+
"ui.chat.sidebar.search.no_match": "По запросу «{query}» в ваших чатах ничего не найдено.",
|
|
52586
|
+
"ui.chat.sidebar.search.placeholder": "Фильтр чатов и агентов",
|
|
52587
|
+
"ui.chat.sidebar.search.searching": "Поиск в разговорах…",
|
|
52588
|
+
"ui.chat.sidebar.search.too_long": "Запрос слишком длинный: ограничение — {max, number, ::group-off} символов. Поиск выполняется только по названиям чатов.",
|
|
52589
|
+
"ui.chat.sidebar.search.unavailable": "Поиск по разговорам недоступен, поэтому показаны совпадения только в названиях.",
|
|
52590
|
+
"ui.chat.sidebar.teams.create": "Создать команду",
|
|
52591
|
+
"ui.chat.sidebar.teams.loading": "Загрузка команд…"
|
|
52592
|
+
};
|
|
51317
52593
|
const ruUiChatSidebarView = {
|
|
51318
52594
|
"ui.chat.sidebar_view.active_first": "Сначала активные",
|
|
51319
52595
|
"ui.chat.sidebar_view.agent_team": "По агенту и команде",
|
|
@@ -51338,6 +52614,12 @@ const ruUiChatSidebarView = {
|
|
|
51338
52614
|
"ui.chat.sidebar_view.time_basis": "Отсчёт времени",
|
|
51339
52615
|
"ui.chat.sidebar_view.time_section": "По времени"
|
|
51340
52616
|
};
|
|
52617
|
+
const ruUiChatTagDialogs = {
|
|
52618
|
+
"ui.chat.tag_dialogs.deleted_name": "«{name}» удалён",
|
|
52619
|
+
"ui.chat.tag_dialogs.created_assigned": "«{name}» создан и добавлен в этот разговор",
|
|
52620
|
+
"ui.chat.tag_dialogs.assign_created_failed": "«{name}» создан, но не удалось добавить его в этот разговор. Выберите его в списке, чтобы добавить.",
|
|
52621
|
+
"ui.chat.tag_dialogs.changed_elsewhere": "Теги изменены в другом месте. В списке теперь показаны актуальные теги разговора; повторите выбор, чтобы применить изменение."
|
|
52622
|
+
};
|
|
51341
52623
|
const ruUiChatTags = {
|
|
51342
52624
|
"ui.chat.tags.label": "Теги",
|
|
51343
52625
|
"ui.chat.tags.menu": "Теги…",
|
|
@@ -51407,6 +52689,17 @@ const ruUiChatTags = {
|
|
|
51407
52689
|
"ui.chat.tags.empty_title": "Группируйте разговоры по тегам.",
|
|
51408
52690
|
"ui.chat.tags.empty_hint": "Нажмите {chord} на разговоре или создайте тег здесь."
|
|
51409
52691
|
};
|
|
52692
|
+
const ruUiChatTranscriptCopy = {
|
|
52693
|
+
"ui.chat.transcript_copy.menu.copy_text": "Копировать текст",
|
|
52694
|
+
"ui.chat.transcript_copy.menu.copy_markdown": "Копировать как Markdown",
|
|
52695
|
+
"ui.chat.transcript_copy.menu.copy_selection": "Копировать выделенное",
|
|
52696
|
+
"ui.chat.transcript_copy.toast.copied_markdown": "Скопировано как Markdown",
|
|
52697
|
+
"ui.chat.transcript_copy.toast.copied_selection": "Выделенное скопировано",
|
|
52698
|
+
"ui.chat.transcript_copy.row.your_message": "Ваше сообщение",
|
|
52699
|
+
"ui.chat.transcript_copy.row.agent_message": "Сообщение агента",
|
|
52700
|
+
"ui.chat.transcript_copy.selection.copy": "Копировать выделенное",
|
|
52701
|
+
"ui.chat.transcript_copy.selection.toolbar": "Действия с выделенным"
|
|
52702
|
+
};
|
|
51410
52703
|
const ruUiCodeReview = {
|
|
51411
52704
|
"ui.code_review.activity.close": "закрыли",
|
|
51412
52705
|
"ui.code_review.activity.comment": "прокомментировали",
|
|
@@ -51612,6 +52905,13 @@ const ruUiCommonErrors = {
|
|
|
51612
52905
|
"ui.common.errors.error_boundary.stack_trace": "Трассировка стека",
|
|
51613
52906
|
"ui.common.errors.error_boundary.the_application_encountered_an_error_try_again_or_contact_support": "Приложение столкнулось с ошибкой. Повторите попытку или обратитесь в поддержку, если проблема не исчезнет."
|
|
51614
52907
|
};
|
|
52908
|
+
const ruUiCommonFileActions = {
|
|
52909
|
+
"ui.common.file_actions.copy_file_path": "Скопировать путь к файлу",
|
|
52910
|
+
"ui.common.file_actions.open_file": "Открыть файл",
|
|
52911
|
+
"ui.common.file_actions.open_folder": "Открыть папку",
|
|
52912
|
+
"ui.common.file_actions.preview": "Предпросмотр",
|
|
52913
|
+
"ui.common.file_actions.show_in_canvas": "Показать в Canvas"
|
|
52914
|
+
};
|
|
51615
52915
|
const ruUiCommonForms = {
|
|
51616
52916
|
"ui.common.forms.autocomplete_field.cancel_editing": "Отменить редактирование {label}",
|
|
51617
52917
|
"ui.common.forms.autocomplete_field.enter_value": "Введите значение…",
|
|
@@ -51799,6 +53099,12 @@ const ruUiCommonUpdates = {
|
|
|
51799
53099
|
"ui.common.updates.wait.minutes_seconds": "Ожидание {minutes, plural, one {{minutes, number, ::group-off} минуты} few {{minutes, number, ::group-off} минут} many {{minutes, number, ::group-off} минут} other {{minutes, number, ::group-off} минуты}} {seconds, plural, one {{seconds, number, ::group-off} секунды} few {{seconds, number, ::group-off} секунд} many {{seconds, number, ::group-off} секунд} other {{seconds, number, ::group-off} секунды}}",
|
|
51800
53100
|
"ui.common.updates.wait.seconds": "Ожидание {seconds, plural, one {{seconds, number, ::group-off} секунды} few {{seconds, number, ::group-off} секунд} many {{seconds, number, ::group-off} секунд} other {{seconds, number, ::group-off} секунды}}"
|
|
51801
53101
|
};
|
|
53102
|
+
const ruUiCommonViewer = {
|
|
53103
|
+
"ui.common.viewer.opening": "Открытие…",
|
|
53104
|
+
"ui.common.viewer.reset_view": "Сбросить вид",
|
|
53105
|
+
"ui.common.viewer.zoom_in": "Увеличить",
|
|
53106
|
+
"ui.common.viewer.zoom_out": "Уменьшить"
|
|
53107
|
+
};
|
|
51802
53108
|
const ruUiConsole = {
|
|
51803
53109
|
"ui.console.capacity.summary": "Активных терминалов в приложении: {live, number, ::group-off} из {limit, number, ::group-off}",
|
|
51804
53110
|
"ui.console.capacity.summary_compact": "{live, number, ::group-off}/{limit, number, ::group-off} · сохранено: {archived, number, ::group-off}",
|
|
@@ -52415,8 +53721,6 @@ const ruUiMesh = {
|
|
|
52415
53721
|
"ui.mesh.mesh_card.reach": "Доступность",
|
|
52416
53722
|
"ui.mesh.mesh_card.recall_to_this_device": "Вернуть на это устройство",
|
|
52417
53723
|
"ui.mesh.mesh_card.remove_from": "Удалить из ",
|
|
52418
|
-
"ui.mesh.mesh_card.revoked": " · отозвано",
|
|
52419
|
-
"ui.mesh.mesh_card.revoked_membership": "членство отозвано",
|
|
52420
53724
|
"ui.mesh.mesh_card.show_in_list": "Показать в списке",
|
|
52421
53725
|
"ui.mesh.mesh_card.shown_of": "{shown, number, ::group-off} из {total, number, ::group-off}",
|
|
52422
53726
|
"ui.mesh.mesh_card.status": "Статус",
|
|
@@ -52471,8 +53775,8 @@ const ruUiMesh = {
|
|
|
52471
53775
|
"ui.mesh.mesh_list.name": "Название",
|
|
52472
53776
|
"ui.mesh.mesh_list.on_device_no_answer": "на {device} (не отвечает)",
|
|
52473
53777
|
"ui.mesh.mesh_list.on_device_state": "на {device}{state}",
|
|
52474
|
-
"ui.mesh.mesh_list.
|
|
52475
|
-
"ui.mesh.mesh_list.revoked_count": "
|
|
53778
|
+
"ui.mesh.mesh_list.revoked_toggle_label": "Показать отозванные участия",
|
|
53779
|
+
"ui.mesh.mesh_list.revoked_count": "{count, plural, one {отозвано: {count, number, ::group-off}} few {отозвано: {count, number, ::group-off}} many {отозвано: {count, number, ::group-off}} other {отозвано: {count, number, ::group-off}}}",
|
|
52476
53780
|
"ui.mesh.mesh_list.show_all_panel": "показать {count, plural, one {{count, number, ::group-off} в панели} few {все {count, number, ::group-off} в панели} many {все {count, number, ::group-off} в панели} other {{count, number, ::group-off} в панели}}",
|
|
52477
53781
|
"ui.mesh.mesh_list.sort_conversations": "Разговоры",
|
|
52478
53782
|
"ui.mesh.mesh_list.sort_devices_by": "Сортировать устройства по",
|
|
@@ -52576,6 +53880,17 @@ const ruUiOnboarding = {
|
|
|
52576
53880
|
"ui.onboarding.modal.step_of": "Шаг {current, number, ::group-off} из {total, number, ::group-off}",
|
|
52577
53881
|
"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} шага}}"
|
|
52578
53882
|
};
|
|
53883
|
+
const ruUiPresence = {
|
|
53884
|
+
"ui.presence.unknown": "неизвестно",
|
|
53885
|
+
"ui.presence.link_down_last_seen": "связь потеряна · последний раз в сети {age}",
|
|
53886
|
+
"ui.presence.device_link_down": "Связь потеряна · {reason} · последний раз в сети {age}",
|
|
53887
|
+
"ui.presence.device_unreachable": "устройство недоступно",
|
|
53888
|
+
"ui.presence.just_now": "только что",
|
|
53889
|
+
"ui.presence.minutes_ago": "{count, number} мин назад",
|
|
53890
|
+
"ui.presence.hours_ago": "{count, number} ч назад",
|
|
53891
|
+
"ui.presence.days_ago": "{count, number} дн. назад",
|
|
53892
|
+
"ui.presence.link_down_compact": "Связь потеряна · {age}"
|
|
53893
|
+
};
|
|
52579
53894
|
const ruUiProjects = {
|
|
52580
53895
|
"ui.projects.board_window_select.projects_updated_within": "Проекты, обновлённые за",
|
|
52581
53896
|
"ui.projects.board_window_select.shows_projects_last_updated_within_this_window_older_ones_are_hid": "Показаны проекты, обновлённые за выбранный период; более старые скрыты.",
|
|
@@ -54854,6 +56169,19 @@ const urUiCanvas = {
|
|
|
54854
56169
|
"ui.canvas.files.prepareError": "اس عمل کے لیے مقامی نقل تیار نہیں ہو سکی",
|
|
54855
56170
|
"ui.canvas.files.pathCopyNote": "کھولنے، فولڈر اور راستے کے اعمال اس گفتگو کے اسکریچ پیڈ میں مقامی نقل بناتے ہیں۔"
|
|
54856
56171
|
};
|
|
56172
|
+
const urUiChatAnalytics = {
|
|
56173
|
+
"ui.chat.analytics.filters.top_level_only": "صرف اعلیٰ سطح کے سیشن",
|
|
56174
|
+
"ui.chat.analytics.search.clear": "تلاش صاف کریں",
|
|
56175
|
+
"ui.chat.analytics.search.sessions": "سیشن تلاش کریں",
|
|
56176
|
+
"ui.chat.analytics.sections.by_channel": "چینل کے لحاظ سے",
|
|
56177
|
+
"ui.chat.analytics.sections.by_model": "ماڈل کے لحاظ سے",
|
|
56178
|
+
"ui.chat.analytics.sections.by_provider": "فراہم کنندہ کے لحاظ سے",
|
|
56179
|
+
"ui.chat.analytics.sections.by_session": "سیشن کے لحاظ سے",
|
|
56180
|
+
"ui.chat.analytics.sections.totals": "مجموعے",
|
|
56181
|
+
"ui.chat.analytics.title": "تجزیات",
|
|
56182
|
+
"ui.chat.analytics.toolbar.refreshing": "تازہ کاری جاری ہے",
|
|
56183
|
+
"ui.chat.analytics.toolbar.this_session_only": "صرف یہ سیشن"
|
|
56184
|
+
};
|
|
54857
56185
|
const urUiChatAsks = {
|
|
54858
56186
|
"ui.chat.asks.context.messages_since": "{count, plural, one {اس سوال کے بعد سے آپ کا # پیغام} other {اس سوال کے بعد سے آپ کے # پیغامات}} (آخری پیغام {time})",
|
|
54859
56187
|
"ui.chat.asks.dismiss.answered_in_chat.note": "آپ گفتگو میں پہلے ہی جواب دے چکے ہیں",
|
|
@@ -54882,6 +56210,41 @@ const urUiChatAttachments = {
|
|
|
54882
56210
|
"ui.chat.attachments.saved_path_copied": "محفوظ شدہ نقل کا راستہ نقل ہو گیا",
|
|
54883
56211
|
"ui.chat.attachments.saved_copy_label": "محفوظ شدہ نقل"
|
|
54884
56212
|
};
|
|
56213
|
+
const urUiChatCanonical = {
|
|
56214
|
+
"ui.chat.canonical.sound.batch_attachment_unavailable": "آڈیو کی منسلک فائل دستیاب نہیں۔",
|
|
56215
|
+
"ui.chat.canonical.sound.player_failed": "یہ آواز نہیں چلائی جا سکی",
|
|
56216
|
+
"ui.chat.canonical.sound.stop.confirm_label": "روکنے کی درخواست کی تصدیق",
|
|
56217
|
+
"ui.chat.canonical.sound.stop.keep_waiting": "انتظار جاری رکھیں",
|
|
56218
|
+
"ui.chat.canonical.sound.stop.question": "آواز کی تخلیق روکیں؟",
|
|
56219
|
+
"ui.chat.canonical.sound.stop.request_stop": "روکنے کی درخواست دیں",
|
|
56220
|
+
"ui.chat.canonical.sound.stop.warning": "فراہم کنندہ کے پاس منسوخی کا endpoint نہیں ہے۔ تخلیق جاری رہے گی اور آڈیو بننے پر لاگت لگے گی۔ روکنے کے لیے پوری کوشش کی جائے گی؛ منسوخی یا لاگت نہ لگنے کی ضمانت نہیں۔",
|
|
56221
|
+
"ui.chat.canonical.supplement.adjust_placeholder": "گرافک میں تبدیلی کریں…",
|
|
56222
|
+
"ui.chat.canonical.supplement.details.attempts": "کوششیں: {count, number, ::group-off}",
|
|
56223
|
+
"ui.chat.canonical.supplement.details.model": "ماڈل: {name}",
|
|
56224
|
+
"ui.chat.canonical.supplement.file_actions.open_in_canvas": "Canvas میں کھولیں",
|
|
56225
|
+
"ui.chat.canonical.supplement.file_actions.open_in_default_app": "ڈیفالٹ ایپ میں کھولیں",
|
|
56226
|
+
"ui.chat.canonical.supplement.file_actions.reveal_in_finder": "Finder میں دکھائیں",
|
|
56227
|
+
"ui.chat.canonical.supplement.frame.failed": "یہ گرافک نہیں دکھایا جا سکا",
|
|
56228
|
+
"ui.chat.canonical.supplement.frame.loading": "گرافک لوڈ ہو رہا ہے…",
|
|
56229
|
+
"ui.chat.canonical.supplement.frame.source": "ماخذ: {name}",
|
|
56230
|
+
"ui.chat.canonical.supplement.preview_unavailable": "ان لائن پیش منظر دستیاب نہیں۔ اس HTML کے لیے غیر تعاون یافتہ وسائل یا دستاویزی مواد درکار ہے۔ دیکھنے کے لیے فائل کھولیں۔",
|
|
56231
|
+
"ui.chat.canonical.supplement.send": "بھیجیں",
|
|
56232
|
+
"ui.chat.canonical.transcript.connect_provider": "فراہم کنندہ منسلک کریں",
|
|
56233
|
+
"ui.chat.canonical.transcript.credential_lost": "سیشن کے پاس اب وہ اسناد نہیں ہیں جن کا اس جواب میں ذکر تھا۔",
|
|
56234
|
+
"ui.chat.canonical.transcript.edit": "ترمیم کریں",
|
|
56235
|
+
"ui.chat.canonical.transcript.missing_session": "یہ گفتگو اب اس مشین پر نہیں ہے۔",
|
|
56236
|
+
"ui.chat.canonical.transcript.missing_session_detail": "اسے حذف کر دیا گیا ہے، یا یہ اس مشین کی ہے جس سے یہ ایپ منسلک نہیں۔",
|
|
56237
|
+
"ui.chat.canonical.transcript.reconnect": "دوبارہ منسلک کریں",
|
|
56238
|
+
"ui.chat.canonical.transcript.reconnecting": "دوبارہ منسلک ہو رہا ہے",
|
|
56239
|
+
"ui.chat.canonical.transcript.send_again": "دوبارہ بھیجیں",
|
|
56240
|
+
"ui.chat.canonical.transcript.source_unavailable": "یہ گفتگو پڑھی جا سکتی ہے، لیکن اس کے پیغامات کی ترتیب کی تصدیق ابھی ماخذ سے نہیں ہو سکی۔",
|
|
56241
|
+
"ui.chat.canonical.transcript.stale_caption": "آخری محفوظ منظر دکھایا جا رہا ہے — نئے پیغامات کی جانچ جاری ہے۔",
|
|
56242
|
+
"ui.chat.canonical.transcript.start_new_chat": "نئی چیٹ شروع کریں",
|
|
56243
|
+
"ui.chat.canonical.transcript.stopped_before_finishing": "مکمل ہونے سے پہلے روک دیا گیا"
|
|
56244
|
+
};
|
|
56245
|
+
const urUiChatCommentaryActions = {
|
|
56246
|
+
"ui.chat.commentary_actions.label": "تبصرے کے اعمال"
|
|
56247
|
+
};
|
|
54885
56248
|
const urUiChatComposer = {
|
|
54886
56249
|
"ui.chat.composer.clear_message": "پیغام صاف کریں",
|
|
54887
56250
|
"ui.chat.composer.message": "پیغام",
|
|
@@ -54900,6 +56263,8 @@ const urUiChatComposer = {
|
|
|
54900
56263
|
"ui.chat.composer.starting_recording": "ریکارڈنگ شروع ہو رہی ہے",
|
|
54901
56264
|
"ui.chat.composer.start_recording_hint": "ریکارڈنگ شروع کریں ({shortcut} یا {pushToTalk} دبائے رکھیں)",
|
|
54902
56265
|
"ui.chat.composer.processing_audio": "آڈیو پر کارروائی جاری ہے",
|
|
56266
|
+
"ui.chat.composer.dictation_failed_transient": "ڈکٹیشن ناکام: ٹرانسکرپشن سروس کو عارضی خرابی پیش آئی۔ دوبارہ کوشش کریں۔",
|
|
56267
|
+
"ui.chat.composer.dictation_failed_transient_take_kept": "ڈکٹیشن ناکام: ٹرانسکرپشن سروس کو عارضی خرابی پیش آئی۔ آپ کی ریکارڈنگ محفوظ ہے — “دوبارہ کوشش کریں” اسے دوبارہ بھیج دے گا۔",
|
|
54903
56268
|
"ui.chat.composer.welcome": "آج میں آپ کی کیا مدد کروں؟",
|
|
54904
56269
|
"ui.chat.composer.delivery_remedies_hint": "جو پیغام نہیں پہنچ سکا اس کے دوبارہ بھیجیں اور ترمیم کریں کے کنٹرول اس خانے کے اوپر گفتگو میں ہیں؛ ان تک پہنچنے کے لیے Shift+Tab دبائیں۔",
|
|
54905
56270
|
"ui.chat.composer.secret_ask_notice": "ایجنٹ ایک راز مانگ رہا ہے۔ اسے سوالات کے پینل میں درج کریں — اس دوران آپ چیٹ جاری رکھ سکتے ہیں۔",
|
|
@@ -54961,9 +56326,94 @@ const urUiChatLiveUpdates = {
|
|
|
54961
56326
|
"ui.chat.live_updates.reloading": "دوبارہ لوڈ ہو رہا ہے…",
|
|
54962
56327
|
"ui.chat.live_updates.reload_failed": "یہ گفتگو دوبارہ لوڈ نہیں ہو سکی۔ دوبارہ کوشش کریں۔"
|
|
54963
56328
|
};
|
|
56329
|
+
const urUiChatPickers = {
|
|
56330
|
+
"ui.chat.pickers.approvals.title": "ٹول کی منظوریاں",
|
|
56331
|
+
"ui.chat.pickers.commands.title": "کمانڈز",
|
|
56332
|
+
"ui.chat.pickers.copy.title": "نقل کریں",
|
|
56333
|
+
"ui.chat.pickers.credential.forget": "بھول جائیں",
|
|
56334
|
+
"ui.chat.pickers.credential.forget_confirmation": "اس سیشن سے {name} کو بھول جائیں",
|
|
56335
|
+
"ui.chat.pickers.credential.title": "اسناد",
|
|
56336
|
+
"ui.chat.pickers.effort.title": "استدلال کی کوشش",
|
|
56337
|
+
"ui.chat.pickers.fast.premium_acknowledgement": "مجھے معلوم ہے کہ فاسٹ موڈ میں فی ٹوکن لاگت زیادہ ہو سکتی ہے",
|
|
56338
|
+
"ui.chat.pickers.fast.title": "فاسٹ موڈ",
|
|
56339
|
+
"ui.chat.pickers.fork.search_placeholder": "کوئی اور طریقہ آزمائیں...",
|
|
56340
|
+
"ui.chat.pickers.goal.clear": "مقصد صاف کریں",
|
|
56341
|
+
"ui.chat.pickers.goal.mark_done": "مکمل نشان زد کریں",
|
|
56342
|
+
"ui.chat.pickers.goal.placeholder": "تمام گیٹس کامیاب ہونے پر ریلیز شپ کریں",
|
|
56343
|
+
"ui.chat.pickers.goal.title": "سیشن کا مقصد",
|
|
56344
|
+
"ui.chat.pickers.login.title": "کسی فراہم کنندہ میں سائن ان کریں",
|
|
56345
|
+
"ui.chat.pickers.logout.confirm": "اس اکاؤنٹ کی محفوظ اسناد ہٹائیں",
|
|
56346
|
+
"ui.chat.pickers.logout.title": "سائن آؤٹ کریں",
|
|
56347
|
+
"ui.chat.pickers.loop.cancel": "لوپ منسوخ کریں",
|
|
56348
|
+
"ui.chat.pickers.loop.title": "لوپ",
|
|
56349
|
+
"ui.chat.pickers.models.connect_provider": "فراہم کنندہ منسلک کریں",
|
|
56350
|
+
"ui.chat.pickers.models.native_details": "نیٹو تفصیلات — {name}",
|
|
56351
|
+
"ui.chat.pickers.models.set_as_default": "موجودہ ماڈل کو ڈیفالٹ بنائیں",
|
|
56352
|
+
"ui.chat.pickers.models.title": "ماڈل",
|
|
56353
|
+
"ui.chat.pickers.new_session.title": "نئی گفتگو",
|
|
56354
|
+
"ui.chat.pickers.profile.loading_detail": "تفصیل لوڈ ہو رہی ہے",
|
|
56355
|
+
"ui.chat.pickers.reload.title": "یہ گفتگو دوبارہ لوڈ کریں",
|
|
56356
|
+
"ui.chat.pickers.rename.title": "گفتگو کا نام بدلیں",
|
|
56357
|
+
"ui.chat.pickers.resume.title": "گفتگو جاری رکھیں",
|
|
56358
|
+
"ui.chat.pickers.skills.loading": "لوڈ ہو رہا ہے",
|
|
56359
|
+
"ui.chat.pickers.skills.title": "مہارتیں",
|
|
56360
|
+
"ui.chat.pickers.stop.all_sessions": "تمام سیشن ({count, number, ::group-off})",
|
|
56361
|
+
"ui.chat.pickers.stop.confirm": "{count, plural, one {یہ سیشن} other {{count, number, ::group-off} سیشن}} اب روکیں",
|
|
56362
|
+
"ui.chat.pickers.stop.title": "روکیں",
|
|
56363
|
+
"ui.chat.pickers.theme.title": "تھیم"
|
|
56364
|
+
};
|
|
54964
56365
|
const urUiChatResponseActions = {
|
|
54965
56366
|
"ui.chat.response_actions.label": "جواب کے اعمال"
|
|
54966
56367
|
};
|
|
56368
|
+
const urUiChatRunDetails = {
|
|
56369
|
+
"ui.chat.run_details.jobs": "کام",
|
|
56370
|
+
"ui.chat.run_details.keep": "جاری رکھیں"
|
|
56371
|
+
};
|
|
56372
|
+
const urUiChatSidebar = {
|
|
56373
|
+
"ui.chat.sidebar.agents.clear_filter": "ایجنٹوں کا فلٹر صاف کریں",
|
|
56374
|
+
"ui.chat.sidebar.agents.create": "ایجنٹ بنائیں",
|
|
56375
|
+
"ui.chat.sidebar.agents.dismiss_offer": "بلٹ ان ایجنٹوں کی تجویز نظرانداز کریں",
|
|
56376
|
+
"ui.chat.sidebar.agents.empty": "ابھی کوئی ایجنٹ نہیں",
|
|
56377
|
+
"ui.chat.sidebar.agents.filter": "ایجنٹ فلٹر کریں",
|
|
56378
|
+
"ui.chat.sidebar.agents.loading": "ایجنٹ لوڈ ہو رہے ہیں…",
|
|
56379
|
+
"ui.chat.sidebar.agents.no_match": "کوئی ایجنٹ نہیں ملتا",
|
|
56380
|
+
"ui.chat.sidebar.drafts.clear_all": "سب صاف کریں",
|
|
56381
|
+
"ui.chat.sidebar.drafts.clear_all_label": "تمام مسودے صاف کریں",
|
|
56382
|
+
"ui.chat.sidebar.header.create": "نیا ایجنٹ یا نئی ٹیم",
|
|
56383
|
+
"ui.chat.sidebar.header.create_agent": "نیا ایجنٹ",
|
|
56384
|
+
"ui.chat.sidebar.header.create_team": "نئی ٹیم",
|
|
56385
|
+
"ui.chat.sidebar.header.open_agent": "ایجنٹ کھولیں…",
|
|
56386
|
+
"ui.chat.sidebar.header.search": "چیٹس اور ایجنٹ تلاش کریں",
|
|
56387
|
+
"ui.chat.sidebar.header.view_options": "دیکھنے کے اختیارات",
|
|
56388
|
+
"ui.chat.sidebar.list.connecting": "چیٹس سے منسلک ہو رہا ہے…",
|
|
56389
|
+
"ui.chat.sidebar.list.empty": "ابھی کوئی چیٹ نہیں۔ کوئی ایجنٹ، ٹیم یا نئی چیٹ منتخب کریں۔",
|
|
56390
|
+
"ui.chat.sidebar.list.loading_more": "مزید چیٹس لوڈ ہو رہی ہیں…",
|
|
56391
|
+
"ui.chat.sidebar.list.offline": "بیک اینڈ سے منسلک نہیں — آخری معلوم حالت دکھائی جا رہی ہے۔",
|
|
56392
|
+
"ui.chat.sidebar.list.retry_refresh": "دوبارہ تازہ کریں",
|
|
56393
|
+
"ui.chat.sidebar.list.truncated_legacy": "زیادہ سے زیادہ 500 چیٹس دکھائی جا رہی ہیں۔ پرانی چیٹس ٹرمینل میں دستیاب ہیں۔",
|
|
56394
|
+
"ui.chat.sidebar.nav.chats": "چیٹس",
|
|
56395
|
+
"ui.chat.sidebar.pins.drag_title": "ترتیب بدلنے کے لیے گھسیٹیں · Esc سے منسوخ کریں",
|
|
56396
|
+
"ui.chat.sidebar.pins.failure": "{action, select, pin {“{title}” پن نہیں کی جا سکی۔} unpin {“{title}” کی پن نہیں ہٹائی جا سکی۔} other {“{title}” اپ ڈیٹ نہیں کی جا سکی۔}}",
|
|
56397
|
+
"ui.chat.sidebar.row.archived_suffix": "، آرکائیو شدہ",
|
|
56398
|
+
"ui.chat.sidebar.row.in_conversation": "گفتگو میں",
|
|
56399
|
+
"ui.chat.sidebar.row.matched_in_conversation": "، گفتگو میں ملا",
|
|
56400
|
+
"ui.chat.sidebar.row.not_sent": "ابھی نہیں بھیجا گیا",
|
|
56401
|
+
"ui.chat.sidebar.row_menu.copy_id": "سیشن ID نقل کریں",
|
|
56402
|
+
"ui.chat.sidebar.row_menu.fork": "گفتگو فورک کریں",
|
|
56403
|
+
"ui.chat.sidebar.row_menu.move_down": "گفتگو نیچے کریں",
|
|
56404
|
+
"ui.chat.sidebar.row_menu.move_up": "گفتگو اوپر کریں",
|
|
56405
|
+
"ui.chat.sidebar.row_menu.rename": "گفتگو کا نام بدلیں",
|
|
56406
|
+
"ui.chat.sidebar.search.clear": "تلاش صاف کریں",
|
|
56407
|
+
"ui.chat.sidebar.search.include_archived": "آرکائیو شدہ شامل کریں",
|
|
56408
|
+
"ui.chat.sidebar.search.names_only": "صرف چیٹ کے نام تلاش کیے جا رہے ہیں۔ گفتگوؤں کے اندر تلاش کرنے کے لیے Local Operator اپ ڈیٹ کریں۔",
|
|
56409
|
+
"ui.chat.sidebar.search.no_match": "آپ کی چیٹس میں “{query}” سے کچھ نہیں ملتا۔",
|
|
56410
|
+
"ui.chat.sidebar.search.placeholder": "چیٹس اور ایجنٹ فلٹر کریں",
|
|
56411
|
+
"ui.chat.sidebar.search.searching": "گفتگو میں تلاش جاری ہے…",
|
|
56412
|
+
"ui.chat.sidebar.search.too_long": "تلاش {max, number, ::group-off} حروف تک محدود ہے۔ یہ تلاش اس سے لمبی ہے، اس لیے صرف چیٹ کے نام تلاش کیے جا رہے ہیں۔",
|
|
56413
|
+
"ui.chat.sidebar.search.unavailable": "گفتگو کی تلاش دستیاب نہیں، اس لیے یہ صرف نام سے ملے ہوئے نتائج ہیں۔",
|
|
56414
|
+
"ui.chat.sidebar.teams.create": "ٹیم بنائیں",
|
|
56415
|
+
"ui.chat.sidebar.teams.loading": "ٹیمیں لوڈ ہو رہی ہیں…"
|
|
56416
|
+
};
|
|
54967
56417
|
const urUiChatSidebarView = {
|
|
54968
56418
|
"ui.chat.sidebar_view.group_by": "گروہ بندی",
|
|
54969
56419
|
"ui.chat.sidebar_view.time_basis": "وقت کی بنیاد",
|
|
@@ -54988,6 +56438,12 @@ const urUiChatSidebarView = {
|
|
|
54988
56438
|
"ui.chat.sidebar_view.section.agents": "ایجنٹ",
|
|
54989
56439
|
"ui.chat.sidebar_view.section.teams": "ٹیمیں"
|
|
54990
56440
|
};
|
|
56441
|
+
const urUiChatTagDialogs = {
|
|
56442
|
+
"ui.chat.tag_dialogs.deleted_name": "“{name}” حذف کر دیا گیا",
|
|
56443
|
+
"ui.chat.tag_dialogs.created_assigned": "“{name}” بنا کر اس گفتگو میں شامل کر دیا گیا",
|
|
56444
|
+
"ui.chat.tag_dialogs.assign_created_failed": "“{name}” بن گیا، لیکن اسے اس گفتگو میں شامل نہیں کیا جا سکا۔ شامل کرنے کے لیے فہرست سے منتخب کریں۔",
|
|
56445
|
+
"ui.chat.tag_dialogs.changed_elsewhere": "ٹیگز کہیں اور تبدیل ہو گئے۔ فہرست اب گفتگو کے موجودہ ٹیگز دکھا رہی ہے؛ اپنی تبدیلی لاگو کرنے کے لیے دوبارہ منتخب کریں۔"
|
|
56446
|
+
};
|
|
54991
56447
|
const urUiChatTags = {
|
|
54992
56448
|
"ui.chat.tags.label": "ٹیگز",
|
|
54993
56449
|
"ui.chat.tags.menu": "ٹیگز…",
|
|
@@ -55057,6 +56513,17 @@ const urUiChatTags = {
|
|
|
55057
56513
|
"ui.chat.tags.empty_title": "گفتگوؤں کو ٹیگ کے لحاظ سے گروہ بند کریں۔",
|
|
55058
56514
|
"ui.chat.tags.empty_hint": "کسی گفتگو پر {chord} دبائیں، یا یہاں ٹیگ بنائیں۔"
|
|
55059
56515
|
};
|
|
56516
|
+
const urUiChatTranscriptCopy = {
|
|
56517
|
+
"ui.chat.transcript_copy.menu.copy_text": "متن نقل کریں",
|
|
56518
|
+
"ui.chat.transcript_copy.menu.copy_markdown": "Markdown کے طور پر نقل کریں",
|
|
56519
|
+
"ui.chat.transcript_copy.menu.copy_selection": "منتخب متن نقل کریں",
|
|
56520
|
+
"ui.chat.transcript_copy.toast.copied_markdown": "Markdown کے طور پر نقل ہو گیا",
|
|
56521
|
+
"ui.chat.transcript_copy.toast.copied_selection": "منتخب متن نقل ہو گیا",
|
|
56522
|
+
"ui.chat.transcript_copy.row.your_message": "آپ کا پیغام",
|
|
56523
|
+
"ui.chat.transcript_copy.row.agent_message": "ایجنٹ کا پیغام",
|
|
56524
|
+
"ui.chat.transcript_copy.selection.copy": "منتخب متن نقل کریں",
|
|
56525
|
+
"ui.chat.transcript_copy.selection.toolbar": "منتخب متن کے اعمال"
|
|
56526
|
+
};
|
|
55060
56527
|
const urUiCodeReview = {
|
|
55061
56528
|
"ui.code_review.activity.close": "بند کیا",
|
|
55062
56529
|
"ui.code_review.activity.comment": "تبصرہ کیا",
|
|
@@ -55262,6 +56729,13 @@ const urUiCommonErrors = {
|
|
|
55262
56729
|
"ui.common.errors.error_boundary.stack_trace": "اسٹیک ٹریس",
|
|
55263
56730
|
"ui.common.errors.error_boundary.the_application_encountered_an_error_try_again_or_contact_support": "ایپ میں خرابی پیش آئی۔ دوبارہ کوشش کریں، یا مسئلہ برقرار رہنے پر معاونت سے رابطہ کریں۔"
|
|
55264
56731
|
};
|
|
56732
|
+
const urUiCommonFileActions = {
|
|
56733
|
+
"ui.common.file_actions.copy_file_path": "فائل کا راستہ نقل کریں",
|
|
56734
|
+
"ui.common.file_actions.open_file": "فائل کھولیں",
|
|
56735
|
+
"ui.common.file_actions.open_folder": "فولڈر کھولیں",
|
|
56736
|
+
"ui.common.file_actions.preview": "پیش منظر",
|
|
56737
|
+
"ui.common.file_actions.show_in_canvas": "Canvas میں دکھائیں"
|
|
56738
|
+
};
|
|
55265
56739
|
const urUiCommonForms = {
|
|
55266
56740
|
"ui.common.forms.autocomplete_field.cancel_editing": "{label} کی ترمیم منسوخ کریں",
|
|
55267
56741
|
"ui.common.forms.autocomplete_field.enter_value": "قدر درج کریں…",
|
|
@@ -55449,6 +56923,12 @@ const urUiCommonUpdates = {
|
|
|
55449
56923
|
"ui.common.updates.wait.minutes_seconds": "اب تک {minutes, plural, one {{minutes, number, ::group-off} منٹ} other {{minutes, number, ::group-off} منٹ}} {seconds, plural, one {{seconds, number, ::group-off} سیکنڈ} other {{seconds, number, ::group-off} سیکنڈ}} انتظار ہوا",
|
|
55450
56924
|
"ui.common.updates.wait.seconds": "اب تک {seconds, plural, one {{seconds, number, ::group-off} سیکنڈ} other {{seconds, number, ::group-off} سیکنڈ}} انتظار ہوا"
|
|
55451
56925
|
};
|
|
56926
|
+
const urUiCommonViewer = {
|
|
56927
|
+
"ui.common.viewer.opening": "کھولا جا رہا ہے…",
|
|
56928
|
+
"ui.common.viewer.reset_view": "منظر ری سیٹ کریں",
|
|
56929
|
+
"ui.common.viewer.zoom_in": "زوم بڑھائیں",
|
|
56930
|
+
"ui.common.viewer.zoom_out": "زوم گھٹائیں"
|
|
56931
|
+
};
|
|
55452
56932
|
const urUiConsole = {
|
|
55453
56933
|
"ui.console.capacity.summary": "ایپ میں {limit, number, ::group-off} میں سے {live, number, ::group-off} فعال",
|
|
55454
56934
|
"ui.console.capacity.summary_compact": "{live, number, ::group-off}/{limit, number, ::group-off} · {archived, number, ::group-off} محفوظ",
|
|
@@ -56040,11 +57520,9 @@ const urUiMesh = {
|
|
|
56040
57520
|
"ui.mesh.mesh_card.move_to": "{device} پر منتقل کریں",
|
|
56041
57521
|
"ui.mesh.mesh_card.copy_to": "{device} پر نقل بنائیں",
|
|
56042
57522
|
"ui.mesh.mesh_card.conversation_count": "{count, plural, one {{count, number, ::group-off} گفتگو} other {{count, number, ::group-off} گفتگوئیں}}",
|
|
56043
|
-
"ui.mesh.mesh_card.revoked_membership": "منسوخ شدہ رکنیت",
|
|
56044
57523
|
"ui.mesh.mesh_card.shown_of": "{total, number, ::group-off} میں سے {shown, number, ::group-off}",
|
|
56045
57524
|
"ui.mesh.mesh_card.device_details": "{device} کی تفصیلات",
|
|
56046
57525
|
"ui.mesh.mesh_card.memberships": "رکنیتیں",
|
|
56047
|
-
"ui.mesh.mesh_card.revoked": " · منسوخ شدہ",
|
|
56048
57526
|
"ui.mesh.mesh_card.remove_from": "اس نیٹ ورک سے ہٹائیں: ",
|
|
56049
57527
|
"ui.mesh.mesh_card.conversations": "گفتگوئیں ",
|
|
56050
57528
|
"ui.mesh.mesh_card.this_device_did_not_report_its_conversations": "اس ڈیوائس نے اپنی گفتگوؤں کی اطلاع نہیں دی۔",
|
|
@@ -56103,8 +57581,8 @@ const urUiMesh = {
|
|
|
56103
57581
|
"ui.mesh.mesh_list.on_device_no_answer": "{device} پر — جواب نہیں دے رہی",
|
|
56104
57582
|
"ui.mesh.mesh_list.sort_devices_by": "ڈیوائسز کی ترتیب کی بنیاد",
|
|
56105
57583
|
"ui.mesh.mesh_list.epoch": "دور {epoch, number, ::group-off}",
|
|
56106
|
-
"ui.mesh.mesh_list.revoked_count": "
|
|
56107
|
-
"ui.mesh.mesh_list.
|
|
57584
|
+
"ui.mesh.mesh_list.revoked_count": "{count, plural, other {{count, number, ::group-off} منسوخ شدہ}}",
|
|
57585
|
+
"ui.mesh.mesh_list.revoked_toggle_label": "منسوخ شدہ رکنیتیں دکھائیں",
|
|
56108
57586
|
"ui.mesh.mesh_list.member": "رکن",
|
|
56109
57587
|
"ui.mesh.mesh_list.move_conversation": "{conversation} منتقل کریں",
|
|
56110
57588
|
"ui.mesh.mesh_list.show_all_panel": "{count, plural, other {سبھی {count, number, ::group-off} پینل میں دکھائیں}}",
|
|
@@ -56226,6 +57704,17 @@ const urUiOnboarding = {
|
|
|
56226
57704
|
"ui.onboarding.modal.step_of": "{total, number, ::group-off} میں سے قدم {current, number, ::group-off}",
|
|
56227
57705
|
"ui.onboarding.modal.steps_total": "{total, plural, one {{total, number, ::group-off} قدم} other {{total, number, ::group-off} قدم}}"
|
|
56228
57706
|
};
|
|
57707
|
+
const urUiPresence = {
|
|
57708
|
+
"ui.presence.unknown": "نامعلوم",
|
|
57709
|
+
"ui.presence.link_down_last_seen": "لنک منقطع · آخری بار {age} دیکھا گیا",
|
|
57710
|
+
"ui.presence.device_link_down": "لنک منقطع · {reason} · آخری بار {age} دیکھا گیا",
|
|
57711
|
+
"ui.presence.device_unreachable": "ڈیوائس ناقابل رسائی",
|
|
57712
|
+
"ui.presence.just_now": "ابھی",
|
|
57713
|
+
"ui.presence.minutes_ago": "{count, number} منٹ پہلے",
|
|
57714
|
+
"ui.presence.hours_ago": "{count, plural, one {{count, number} گھنٹہ پہلے} other {{count, number} گھنٹے پہلے}}",
|
|
57715
|
+
"ui.presence.days_ago": "{count, number} دن پہلے",
|
|
57716
|
+
"ui.presence.link_down_compact": "لنک منقطع · {age}"
|
|
57717
|
+
};
|
|
56229
57718
|
const urUiProjects = {
|
|
56230
57719
|
"ui.projects.board_window_select.projects_updated_within": "اس مدت میں اپ ڈیٹ کیے گئے پروجیکٹ",
|
|
56231
57720
|
"ui.projects.board_window_select.shows_projects_last_updated_within_this_window_older_ones_are_hid": "اس مدت میں آخری بار اپ ڈیٹ کیے گئے پروجیکٹ دکھاتا ہے؛ پرانے پروجیکٹ چھپ جاتے ہیں۔",
|
|
@@ -58504,6 +59993,19 @@ const viUiCanvas = {
|
|
|
58504
59993
|
"ui.canvas.files.prepareError": "Không chuẩn bị được bản sao cục bộ cho thao tác này",
|
|
58505
59994
|
"ui.canvas.files.pathCopyNote": "Các thao tác mở tệp, mở thư mục và thao tác với đường dẫn sẽ tạo bản sao cục bộ trong thư mục nháp của cuộc trò chuyện này."
|
|
58506
59995
|
};
|
|
59996
|
+
const viUiChatAnalytics = {
|
|
59997
|
+
"ui.chat.analytics.filters.top_level_only": "Chỉ phiên cấp cao nhất",
|
|
59998
|
+
"ui.chat.analytics.search.clear": "Xóa tìm kiếm",
|
|
59999
|
+
"ui.chat.analytics.search.sessions": "Tìm phiên",
|
|
60000
|
+
"ui.chat.analytics.sections.by_channel": "Theo kênh",
|
|
60001
|
+
"ui.chat.analytics.sections.by_model": "Theo mô hình",
|
|
60002
|
+
"ui.chat.analytics.sections.by_provider": "Theo nhà cung cấp",
|
|
60003
|
+
"ui.chat.analytics.sections.by_session": "Theo phiên",
|
|
60004
|
+
"ui.chat.analytics.sections.totals": "Tổng",
|
|
60005
|
+
"ui.chat.analytics.title": "Phân tích",
|
|
60006
|
+
"ui.chat.analytics.toolbar.refreshing": "Đang làm mới",
|
|
60007
|
+
"ui.chat.analytics.toolbar.this_session_only": "Chỉ phiên này"
|
|
60008
|
+
};
|
|
58507
60009
|
const viUiChatAsks = {
|
|
58508
60010
|
"ui.chat.asks.context.messages_since": "{count, plural, other {# tin nhắn của bạn kể từ khi câu hỏi này được đưa ra}} (tin nhắn gần nhất lúc {time})",
|
|
58509
60011
|
"ui.chat.asks.dismiss.answered_in_chat.note": "bạn đã trả lời trong cuộc trò chuyện",
|
|
@@ -58532,6 +60034,41 @@ const viUiChatAttachments = {
|
|
|
58532
60034
|
"ui.chat.attachments.saved_path_copied": "Đã sao chép đường dẫn bản sao đã lưu",
|
|
58533
60035
|
"ui.chat.attachments.saved_copy_label": "Bản sao đã lưu"
|
|
58534
60036
|
};
|
|
60037
|
+
const viUiChatCanonical = {
|
|
60038
|
+
"ui.chat.canonical.sound.batch_attachment_unavailable": "Tệp đính kèm âm thanh không khả dụng.",
|
|
60039
|
+
"ui.chat.canonical.sound.player_failed": "Không phát được âm thanh này",
|
|
60040
|
+
"ui.chat.canonical.sound.stop.confirm_label": "Xác nhận yêu cầu dừng",
|
|
60041
|
+
"ui.chat.canonical.sound.stop.keep_waiting": "Tiếp tục chờ",
|
|
60042
|
+
"ui.chat.canonical.sound.stop.question": "Dừng tạo âm thanh?",
|
|
60043
|
+
"ui.chat.canonical.sound.stop.request_stop": "Yêu cầu dừng",
|
|
60044
|
+
"ui.chat.canonical.sound.stop.warning": "Nhà cung cấp không có endpoint hủy. Quá trình tạo vẫn tiếp tục và sẽ bị tính phí nếu tạo ra âm thanh. Việc dừng chỉ là nỗ lực tối đa; không đảm bảo hủy được hoặc không bị tính phí.",
|
|
60045
|
+
"ui.chat.canonical.supplement.adjust_placeholder": "Điều chỉnh đồ họa…",
|
|
60046
|
+
"ui.chat.canonical.supplement.details.attempts": "Số lần thử: {count, number, ::group-off}",
|
|
60047
|
+
"ui.chat.canonical.supplement.details.model": "Mô hình: {name}",
|
|
60048
|
+
"ui.chat.canonical.supplement.file_actions.open_in_canvas": "Mở trong Canvas",
|
|
60049
|
+
"ui.chat.canonical.supplement.file_actions.open_in_default_app": "Mở bằng ứng dụng mặc định",
|
|
60050
|
+
"ui.chat.canonical.supplement.file_actions.reveal_in_finder": "Hiện trong Finder",
|
|
60051
|
+
"ui.chat.canonical.supplement.frame.failed": "Không hiển thị được đồ họa này",
|
|
60052
|
+
"ui.chat.canonical.supplement.frame.loading": "Đang tải đồ họa…",
|
|
60053
|
+
"ui.chat.canonical.supplement.frame.source": "Nguồn: {name}",
|
|
60054
|
+
"ui.chat.canonical.supplement.preview_unavailable": "Không xem trước được tại đây. HTML này cần tài nguyên hoặc nội dung tài liệu mà ứng dụng không hỗ trợ. Mở tệp để xem.",
|
|
60055
|
+
"ui.chat.canonical.supplement.send": "Gửi",
|
|
60056
|
+
"ui.chat.canonical.transcript.connect_provider": "Kết nối nhà cung cấp",
|
|
60057
|
+
"ui.chat.canonical.transcript.credential_lost": "Phiên không còn giữ thông tin xác thực được nêu trong phản hồi này.",
|
|
60058
|
+
"ui.chat.canonical.transcript.edit": "Sửa",
|
|
60059
|
+
"ui.chat.canonical.transcript.missing_session": "Cuộc trò chuyện này không còn trên máy này.",
|
|
60060
|
+
"ui.chat.canonical.transcript.missing_session_detail": "Cuộc trò chuyện đã bị xóa, hoặc thuộc về một máy mà ứng dụng này không kết nối tới.",
|
|
60061
|
+
"ui.chat.canonical.transcript.reconnect": "Kết nối lại",
|
|
60062
|
+
"ui.chat.canonical.transcript.reconnecting": "Đang kết nối lại",
|
|
60063
|
+
"ui.chat.canonical.transcript.send_again": "Gửi lại",
|
|
60064
|
+
"ui.chat.canonical.transcript.source_unavailable": "Vẫn đọc được cuộc trò chuyện này, nhưng hiện không xác nhận được thứ tự tin nhắn từ nguồn.",
|
|
60065
|
+
"ui.chat.canonical.transcript.stale_caption": "Đang hiển thị nội dung đã lưu gần nhất — đang kiểm tra tin nhắn mới hơn.",
|
|
60066
|
+
"ui.chat.canonical.transcript.start_new_chat": "Tạo cuộc trò chuyện mới",
|
|
60067
|
+
"ui.chat.canonical.transcript.stopped_before_finishing": "Đã dừng trước khi hoàn tất"
|
|
60068
|
+
};
|
|
60069
|
+
const viUiChatCommentaryActions = {
|
|
60070
|
+
"ui.chat.commentary_actions.label": "Thao tác lời dẫn"
|
|
60071
|
+
};
|
|
58535
60072
|
const viUiChatComposer = {
|
|
58536
60073
|
"ui.chat.composer.clear_message": "Xóa tin nhắn",
|
|
58537
60074
|
"ui.chat.composer.message": "Tin nhắn",
|
|
@@ -58550,6 +60087,8 @@ const viUiChatComposer = {
|
|
|
58550
60087
|
"ui.chat.composer.starting_recording": "Đang bắt đầu ghi âm",
|
|
58551
60088
|
"ui.chat.composer.start_recording_hint": "Bắt đầu ghi âm ({shortcut} hoặc giữ {pushToTalk})",
|
|
58552
60089
|
"ui.chat.composer.processing_audio": "Đang xử lý âm thanh",
|
|
60090
|
+
"ui.chat.composer.dictation_failed_transient": "Đọc chính tả thất bại: dịch vụ chuyển giọng nói thành văn bản gặp sự cố tạm thời. Hãy thử lại.",
|
|
60091
|
+
"ui.chat.composer.dictation_failed_transient_take_kept": "Đọc chính tả thất bại: dịch vụ chuyển giọng nói thành văn bản gặp sự cố tạm thời. Bản ghi âm của bạn được giữ lại — Thử lại sẽ gửi bản ghi âm đi.",
|
|
58553
60092
|
"ui.chat.composer.welcome": "Hôm nay tôi có thể giúp gì cho bạn?",
|
|
58554
60093
|
"ui.chat.composer.delivery_remedies_hint": "Tin nhắn chưa gửi được có nút Gửi lại và Sửa trong cuộc trò chuyện phía trên ô này: nhấn Shift+Tab để đến các nút đó.",
|
|
58555
60094
|
"ui.chat.composer.secret_ask_notice": "Tác nhân đang yêu cầu thông tin bí mật. Hãy nhập vào bảng câu hỏi — bạn vẫn có thể trò chuyện trong lúc này.",
|
|
@@ -58611,9 +60150,94 @@ const viUiChatLiveUpdates = {
|
|
|
58611
60150
|
"ui.chat.live_updates.reloading": "Đang tải lại…",
|
|
58612
60151
|
"ui.chat.live_updates.reload_failed": "Không thể tải lại cuộc trò chuyện này. Hãy thử lại."
|
|
58613
60152
|
};
|
|
60153
|
+
const viUiChatPickers = {
|
|
60154
|
+
"ui.chat.pickers.approvals.title": "Phê duyệt công cụ",
|
|
60155
|
+
"ui.chat.pickers.commands.title": "Lệnh",
|
|
60156
|
+
"ui.chat.pickers.copy.title": "Sao chép",
|
|
60157
|
+
"ui.chat.pickers.credential.forget": "Quên",
|
|
60158
|
+
"ui.chat.pickers.credential.forget_confirmation": "Quên {name} khỏi phiên này",
|
|
60159
|
+
"ui.chat.pickers.credential.title": "Thông tin xác thực",
|
|
60160
|
+
"ui.chat.pickers.effort.title": "Mức suy luận",
|
|
60161
|
+
"ui.chat.pickers.fast.premium_acknowledgement": "Tôi hiểu chế độ nhanh có thể có chi phí cao hơn mỗi token",
|
|
60162
|
+
"ui.chat.pickers.fast.title": "Chế độ nhanh",
|
|
60163
|
+
"ui.chat.pickers.fork.search_placeholder": "Thử cách tiếp cận khác…",
|
|
60164
|
+
"ui.chat.pickers.goal.clear": "Xóa mục tiêu",
|
|
60165
|
+
"ui.chat.pickers.goal.mark_done": "Đánh dấu xong",
|
|
60166
|
+
"ui.chat.pickers.goal.placeholder": "Phát hành bản mới khi các kiểm tra đều đạt",
|
|
60167
|
+
"ui.chat.pickers.goal.title": "Mục tiêu phiên",
|
|
60168
|
+
"ui.chat.pickers.login.title": "Đăng nhập vào nhà cung cấp",
|
|
60169
|
+
"ui.chat.pickers.logout.confirm": "Xóa thông tin xác thực đã lưu của tài khoản này",
|
|
60170
|
+
"ui.chat.pickers.logout.title": "Đăng xuất",
|
|
60171
|
+
"ui.chat.pickers.loop.cancel": "Hủy vòng lặp",
|
|
60172
|
+
"ui.chat.pickers.loop.title": "Vòng lặp",
|
|
60173
|
+
"ui.chat.pickers.models.connect_provider": "Kết nối nhà cung cấp",
|
|
60174
|
+
"ui.chat.pickers.models.native_details": "Chi tiết gốc — {name}",
|
|
60175
|
+
"ui.chat.pickers.models.set_as_default": "Đặt mô hình hiện tại làm mặc định",
|
|
60176
|
+
"ui.chat.pickers.models.title": "Mô hình",
|
|
60177
|
+
"ui.chat.pickers.new_session.title": "Cuộc trò chuyện mới",
|
|
60178
|
+
"ui.chat.pickers.profile.loading_detail": "Đang tải chi tiết",
|
|
60179
|
+
"ui.chat.pickers.reload.title": "Tải lại cuộc trò chuyện này",
|
|
60180
|
+
"ui.chat.pickers.rename.title": "Đổi tên cuộc trò chuyện",
|
|
60181
|
+
"ui.chat.pickers.resume.title": "Tiếp tục cuộc trò chuyện",
|
|
60182
|
+
"ui.chat.pickers.skills.loading": "Đang tải",
|
|
60183
|
+
"ui.chat.pickers.skills.title": "Kỹ năng",
|
|
60184
|
+
"ui.chat.pickers.stop.all_sessions": "Tất cả phiên ({count, number, ::group-off})",
|
|
60185
|
+
"ui.chat.pickers.stop.confirm": "Dừng {count, plural, =1 {phiên này} other {{count, number, ::group-off} phiên}} ngay",
|
|
60186
|
+
"ui.chat.pickers.stop.title": "Dừng",
|
|
60187
|
+
"ui.chat.pickers.theme.title": "Giao diện"
|
|
60188
|
+
};
|
|
58614
60189
|
const viUiChatResponseActions = {
|
|
58615
60190
|
"ui.chat.response_actions.label": "Thao tác phản hồi"
|
|
58616
60191
|
};
|
|
60192
|
+
const viUiChatRunDetails = {
|
|
60193
|
+
"ui.chat.run_details.jobs": "Tác vụ",
|
|
60194
|
+
"ui.chat.run_details.keep": "Giữ lại"
|
|
60195
|
+
};
|
|
60196
|
+
const viUiChatSidebar = {
|
|
60197
|
+
"ui.chat.sidebar.agents.clear_filter": "Xóa bộ lọc tác nhân",
|
|
60198
|
+
"ui.chat.sidebar.agents.create": "Tạo tác nhân",
|
|
60199
|
+
"ui.chat.sidebar.agents.dismiss_offer": "Ẩn gợi ý tác nhân tích hợp",
|
|
60200
|
+
"ui.chat.sidebar.agents.empty": "Chưa có tác nhân nào",
|
|
60201
|
+
"ui.chat.sidebar.agents.filter": "Lọc tác nhân",
|
|
60202
|
+
"ui.chat.sidebar.agents.loading": "Đang tải tác nhân…",
|
|
60203
|
+
"ui.chat.sidebar.agents.no_match": "Không có tác nhân phù hợp",
|
|
60204
|
+
"ui.chat.sidebar.drafts.clear_all": "Xóa tất cả",
|
|
60205
|
+
"ui.chat.sidebar.drafts.clear_all_label": "Xóa tất cả bản nháp",
|
|
60206
|
+
"ui.chat.sidebar.header.create": "Tác nhân hoặc nhóm mới",
|
|
60207
|
+
"ui.chat.sidebar.header.create_agent": "Tác nhân mới",
|
|
60208
|
+
"ui.chat.sidebar.header.create_team": "Nhóm mới",
|
|
60209
|
+
"ui.chat.sidebar.header.open_agent": "Mở tác nhân…",
|
|
60210
|
+
"ui.chat.sidebar.header.search": "Tìm cuộc trò chuyện và tác nhân",
|
|
60211
|
+
"ui.chat.sidebar.header.view_options": "Tùy chọn hiển thị",
|
|
60212
|
+
"ui.chat.sidebar.list.connecting": "Đang kết nối với các cuộc trò chuyện…",
|
|
60213
|
+
"ui.chat.sidebar.list.empty": "Chưa có cuộc trò chuyện nào. Chọn tác nhân, nhóm hoặc Cuộc trò chuyện mới.",
|
|
60214
|
+
"ui.chat.sidebar.list.loading_more": "Đang tải thêm…",
|
|
60215
|
+
"ui.chat.sidebar.list.offline": "Chưa kết nối với máy chủ — đang hiển thị trạng thái gần nhất đã biết.",
|
|
60216
|
+
"ui.chat.sidebar.list.retry_refresh": "Làm mới lại",
|
|
60217
|
+
"ui.chat.sidebar.list.truncated_legacy": "Hiển thị tối đa 500 cuộc trò chuyện. Các cuộc trò chuyện cũ hơn vẫn có trong terminal.",
|
|
60218
|
+
"ui.chat.sidebar.nav.chats": "Cuộc trò chuyện",
|
|
60219
|
+
"ui.chat.sidebar.pins.drag_title": "Kéo để sắp xếp lại · nhấn Esc để hủy",
|
|
60220
|
+
"ui.chat.sidebar.pins.failure": "{action, select, pin {Không ghim được “{title}”.} unpin {Không bỏ ghim được “{title}”.} other {Không cập nhật được “{title}”.}}",
|
|
60221
|
+
"ui.chat.sidebar.row.archived_suffix": ", đã lưu trữ",
|
|
60222
|
+
"ui.chat.sidebar.row.in_conversation": "trong cuộc trò chuyện",
|
|
60223
|
+
"ui.chat.sidebar.row.matched_in_conversation": ", có kết quả trong cuộc trò chuyện",
|
|
60224
|
+
"ui.chat.sidebar.row.not_sent": "Chưa gửi",
|
|
60225
|
+
"ui.chat.sidebar.row_menu.copy_id": "Sao chép ID phiên",
|
|
60226
|
+
"ui.chat.sidebar.row_menu.fork": "Tách nhánh cuộc trò chuyện",
|
|
60227
|
+
"ui.chat.sidebar.row_menu.move_down": "Chuyển cuộc trò chuyện xuống",
|
|
60228
|
+
"ui.chat.sidebar.row_menu.move_up": "Chuyển cuộc trò chuyện lên",
|
|
60229
|
+
"ui.chat.sidebar.row_menu.rename": "Đổi tên cuộc trò chuyện",
|
|
60230
|
+
"ui.chat.sidebar.search.clear": "Xóa tìm kiếm",
|
|
60231
|
+
"ui.chat.sidebar.search.include_archived": "Tìm cả mục đã lưu trữ",
|
|
60232
|
+
"ui.chat.sidebar.search.names_only": "Chỉ tìm theo tên cuộc trò chuyện. Cập nhật Local Operator để tìm trong nội dung cuộc trò chuyện.",
|
|
60233
|
+
"ui.chat.sidebar.search.no_match": "Không có cuộc trò chuyện nào khớp với “{query}”.",
|
|
60234
|
+
"ui.chat.sidebar.search.placeholder": "Lọc cuộc trò chuyện và tác nhân",
|
|
60235
|
+
"ui.chat.sidebar.search.searching": "Đang tìm cuộc trò chuyện…",
|
|
60236
|
+
"ui.chat.sidebar.search.too_long": "Từ khóa tìm kiếm không được dài quá {max, number, ::group-off} ký tự. Từ khóa này dài hơn nên chỉ tìm theo tên cuộc trò chuyện.",
|
|
60237
|
+
"ui.chat.sidebar.search.unavailable": "Không thể tìm trong nội dung cuộc trò chuyện, nên chỉ có kết quả khớp theo tên.",
|
|
60238
|
+
"ui.chat.sidebar.teams.create": "Tạo nhóm",
|
|
60239
|
+
"ui.chat.sidebar.teams.loading": "Đang tải nhóm…"
|
|
60240
|
+
};
|
|
58617
60241
|
const viUiChatSidebarView = {
|
|
58618
60242
|
"ui.chat.sidebar_view.group_by": "Nhóm theo",
|
|
58619
60243
|
"ui.chat.sidebar_view.time_basis": "Mốc thời gian",
|
|
@@ -58638,6 +60262,12 @@ const viUiChatSidebarView = {
|
|
|
58638
60262
|
"ui.chat.sidebar_view.section.agents": "Tác nhân",
|
|
58639
60263
|
"ui.chat.sidebar_view.section.teams": "Nhóm"
|
|
58640
60264
|
};
|
|
60265
|
+
const viUiChatTagDialogs = {
|
|
60266
|
+
"ui.chat.tag_dialogs.deleted_name": "Đã xóa “{name}”",
|
|
60267
|
+
"ui.chat.tag_dialogs.created_assigned": "Đã tạo “{name}” và thêm vào cuộc trò chuyện này",
|
|
60268
|
+
"ui.chat.tag_dialogs.assign_created_failed": "Đã tạo “{name}” nhưng không thêm được vào cuộc trò chuyện này. Chọn nhãn trong danh sách để thêm.",
|
|
60269
|
+
"ui.chat.tag_dialogs.changed_elsewhere": "Nhãn đã thay đổi ở nơi khác. Danh sách hiện hiển thị nhãn mới nhất của cuộc trò chuyện; hãy chọn lại để áp dụng thay đổi của bạn."
|
|
60270
|
+
};
|
|
58641
60271
|
const viUiChatTags = {
|
|
58642
60272
|
"ui.chat.tags.label": "Nhãn",
|
|
58643
60273
|
"ui.chat.tags.menu": "Nhãn…",
|
|
@@ -58707,6 +60337,17 @@ const viUiChatTags = {
|
|
|
58707
60337
|
"ui.chat.tags.empty_title": "Nhóm cuộc trò chuyện theo nhãn.",
|
|
58708
60338
|
"ui.chat.tags.empty_hint": "Nhấn {chord} trên một cuộc trò chuyện, hoặc tạo nhãn tại đây."
|
|
58709
60339
|
};
|
|
60340
|
+
const viUiChatTranscriptCopy = {
|
|
60341
|
+
"ui.chat.transcript_copy.menu.copy_text": "Sao chép văn bản",
|
|
60342
|
+
"ui.chat.transcript_copy.menu.copy_markdown": "Sao chép Markdown",
|
|
60343
|
+
"ui.chat.transcript_copy.menu.copy_selection": "Sao chép phần đã chọn",
|
|
60344
|
+
"ui.chat.transcript_copy.toast.copied_markdown": "Đã sao chép Markdown",
|
|
60345
|
+
"ui.chat.transcript_copy.toast.copied_selection": "Đã sao chép phần đã chọn",
|
|
60346
|
+
"ui.chat.transcript_copy.row.your_message": "Tin nhắn của bạn",
|
|
60347
|
+
"ui.chat.transcript_copy.row.agent_message": "Tin nhắn của tác nhân",
|
|
60348
|
+
"ui.chat.transcript_copy.selection.copy": "Sao chép phần đã chọn",
|
|
60349
|
+
"ui.chat.transcript_copy.selection.toolbar": "Thao tác với phần đã chọn"
|
|
60350
|
+
};
|
|
58710
60351
|
const viUiCodeReview = {
|
|
58711
60352
|
"ui.code_review.activity.close": "đã đóng",
|
|
58712
60353
|
"ui.code_review.activity.comment": "đã bình luận",
|
|
@@ -58912,6 +60553,13 @@ const viUiCommonErrors = {
|
|
|
58912
60553
|
"ui.common.errors.error_boundary.stack_trace": "Dấu vết ngăn xếp",
|
|
58913
60554
|
"ui.common.errors.error_boundary.the_application_encountered_an_error_try_again_or_contact_support": "Ứng dụng gặp lỗi. Hãy thử lại, hoặc liên hệ hỗ trợ nếu sự cố vẫn tiếp diễn."
|
|
58914
60555
|
};
|
|
60556
|
+
const viUiCommonFileActions = {
|
|
60557
|
+
"ui.common.file_actions.copy_file_path": "Sao chép đường dẫn",
|
|
60558
|
+
"ui.common.file_actions.open_file": "Mở tệp",
|
|
60559
|
+
"ui.common.file_actions.open_folder": "Mở thư mục",
|
|
60560
|
+
"ui.common.file_actions.preview": "Xem trước",
|
|
60561
|
+
"ui.common.file_actions.show_in_canvas": "Hiển thị trong Canvas"
|
|
60562
|
+
};
|
|
58915
60563
|
const viUiCommonForms = {
|
|
58916
60564
|
"ui.common.forms.autocomplete_field.cancel_editing": "Hủy sửa {label}",
|
|
58917
60565
|
"ui.common.forms.autocomplete_field.enter_value": "Nhập giá trị...",
|
|
@@ -59099,6 +60747,12 @@ const viUiCommonUpdates = {
|
|
|
59099
60747
|
"ui.common.updates.wait.minutes_seconds": "Đã chờ {minutes, plural, other {{minutes, number, ::group-off} phút}} {seconds, plural, other {{seconds, number, ::group-off} giây}}",
|
|
59100
60748
|
"ui.common.updates.wait.seconds": "Đã chờ {seconds, plural, other {{seconds, number, ::group-off} giây}}"
|
|
59101
60749
|
};
|
|
60750
|
+
const viUiCommonViewer = {
|
|
60751
|
+
"ui.common.viewer.opening": "Đang mở…",
|
|
60752
|
+
"ui.common.viewer.reset_view": "Đặt lại chế độ xem",
|
|
60753
|
+
"ui.common.viewer.zoom_in": "Phóng to",
|
|
60754
|
+
"ui.common.viewer.zoom_out": "Thu nhỏ"
|
|
60755
|
+
};
|
|
59102
60756
|
const viUiConsole = {
|
|
59103
60757
|
"ui.console.capacity.summary": "{live, number, ::group-off} đang chạy trên tổng số {limit, number, ::group-off} trong ứng dụng",
|
|
59104
60758
|
"ui.console.capacity.summary_compact": "{live, number, ::group-off}/{limit, number, ::group-off} · giữ lại {archived, number, ::group-off}",
|
|
@@ -59690,11 +61344,9 @@ const viUiMesh = {
|
|
|
59690
61344
|
"ui.mesh.mesh_card.move_to": "Chuyển đến {device}",
|
|
59691
61345
|
"ui.mesh.mesh_card.copy_to": "Sao chép đến {device}",
|
|
59692
61346
|
"ui.mesh.mesh_card.conversation_count": "{count, plural, other {{count, number, ::group-off} cuộc trò chuyện}}",
|
|
59693
|
-
"ui.mesh.mesh_card.revoked_membership": "tư cách thành viên đã bị thu hồi",
|
|
59694
61347
|
"ui.mesh.mesh_card.shown_of": "{shown, number, ::group-off} trên {total, number, ::group-off}",
|
|
59695
61348
|
"ui.mesh.mesh_card.device_details": "Chi tiết {device}",
|
|
59696
61349
|
"ui.mesh.mesh_card.memberships": "Tư cách thành viên",
|
|
59697
|
-
"ui.mesh.mesh_card.revoked": " · đã thu hồi",
|
|
59698
61350
|
"ui.mesh.mesh_card.remove_from": "Xóa khỏi ",
|
|
59699
61351
|
"ui.mesh.mesh_card.conversations": "Cuộc trò chuyện ",
|
|
59700
61352
|
"ui.mesh.mesh_card.this_device_did_not_report_its_conversations": "Thiết bị này không báo cáo các cuộc trò chuyện.",
|
|
@@ -59753,8 +61405,8 @@ const viUiMesh = {
|
|
|
59753
61405
|
"ui.mesh.mesh_list.on_device_no_answer": "trên {device} (không phản hồi)",
|
|
59754
61406
|
"ui.mesh.mesh_list.sort_devices_by": "Sắp xếp thiết bị theo",
|
|
59755
61407
|
"ui.mesh.mesh_list.epoch": "phiên bản {epoch, number, ::group-off}",
|
|
59756
|
-
"ui.mesh.mesh_list.revoked_count": "
|
|
59757
|
-
"ui.mesh.mesh_list.
|
|
61408
|
+
"ui.mesh.mesh_list.revoked_count": "{count, plural, other {{count, number, ::group-off} đã thu hồi}}",
|
|
61409
|
+
"ui.mesh.mesh_list.revoked_toggle_label": "Hiện các tư cách thành viên đã thu hồi",
|
|
59758
61410
|
"ui.mesh.mesh_list.member": "thành viên",
|
|
59759
61411
|
"ui.mesh.mesh_list.move_conversation": "Chuyển {conversation}",
|
|
59760
61412
|
"ui.mesh.mesh_list.show_all_panel": "hiện toàn bộ {count, plural, other {{count, number, ::group-off} trong bảng}}",
|
|
@@ -59876,6 +61528,17 @@ const viUiOnboarding = {
|
|
|
59876
61528
|
"ui.onboarding.modal.step_of": "Bước {current, number, ::group-off} trên {total, number, ::group-off}",
|
|
59877
61529
|
"ui.onboarding.modal.steps_total": "{total, plural, other {{total, number, ::group-off} bước}}"
|
|
59878
61530
|
};
|
|
61531
|
+
const viUiPresence = {
|
|
61532
|
+
"ui.presence.unknown": "không rõ",
|
|
61533
|
+
"ui.presence.link_down_last_seen": "Mất liên kết · lần cuối hoạt động {age}",
|
|
61534
|
+
"ui.presence.device_link_down": "Mất liên kết thiết bị · {reason} · lần cuối hoạt động {age}",
|
|
61535
|
+
"ui.presence.device_unreachable": "không truy cập được thiết bị",
|
|
61536
|
+
"ui.presence.just_now": "vừa xong",
|
|
61537
|
+
"ui.presence.minutes_ago": "{count, number} phút trước",
|
|
61538
|
+
"ui.presence.hours_ago": "{count, number} giờ trước",
|
|
61539
|
+
"ui.presence.days_ago": "{count, number} ngày trước",
|
|
61540
|
+
"ui.presence.link_down_compact": "Mất liên kết · {age}"
|
|
61541
|
+
};
|
|
59879
61542
|
const viUiProjects = {
|
|
59880
61543
|
"ui.projects.board_window_select.projects_updated_within": "Dự án cập nhật trong",
|
|
59881
61544
|
"ui.projects.board_window_select.shows_projects_last_updated_within_this_window_older_ones_are_hid": "Hiển thị dự án được cập nhật gần nhất trong khoảng này; các dự án cũ hơn sẽ bị ẩn.",
|
|
@@ -60302,6 +61965,197 @@ const viUiProjects = {
|
|
|
60302
61965
|
"ui.projects.use_request_update.could_not_request_updates_endedsentence_message": "Không thể yêu cầu cập nhật: {endedSentence_message}",
|
|
60303
61966
|
"ui.projects.use_request_update.the_request_could_not_be_confirmed": "Không thể xác nhận yêu cầu."
|
|
60304
61967
|
};
|
|
61968
|
+
const viUiProviders = {
|
|
61969
|
+
"ui.providers.phone.account": "Tài khoản: {identity}, thông tin xác thực {id}",
|
|
61970
|
+
"ui.providers.phone.account_unlabeled": "Tài khoản: thông tin xác thực {id}",
|
|
61971
|
+
"ui.providers.phone.action.activate": "Kích hoạt với {amount} USD mỗi tháng",
|
|
61972
|
+
"ui.providers.phone.action.cancel": "Hủy",
|
|
61973
|
+
"ui.providers.phone.action.check_again": "Kiểm tra lại",
|
|
61974
|
+
"ui.providers.phone.action.choose": "{identity}, thông tin xác thực {id}",
|
|
61975
|
+
"ui.providers.phone.action.choose_unlabeled": "Thông tin xác thực {id}",
|
|
61976
|
+
"ui.providers.phone.action.copy_address": "Sao chép địa chỉ",
|
|
61977
|
+
"ui.providers.phone.action.set_up": "Thiết lập truy cập từ điện thoại",
|
|
61978
|
+
"ui.providers.phone.action.sign_in": "Tiếp tục trong trình duyệt",
|
|
61979
|
+
"ui.providers.phone.address_label": "Địa chỉ điện thoại",
|
|
61980
|
+
"ui.providers.phone.choose_heading": "Chọn tài khoản",
|
|
61981
|
+
"ui.providers.phone.consent": "Kích hoạt sẽ thiết lập gói thuê bao tunnel cho tài khoản Radient này với {amount} USD mỗi tháng, đặt trước địa chỉ điện thoại của bạn và khởi động trình kết nối nền. Thao tác này không mua tín dụng.",
|
|
61982
|
+
"ui.providers.phone.failure.check": "Không kiểm tra được tính năng truy cập từ điện thoại và không có thay đổi nào.",
|
|
61983
|
+
"ui.providers.phone.failure.run": "Không hoàn tất thiết lập truy cập từ điện thoại. Các bước đã hoàn thành sẽ không được hoàn tác. Hãy kiểm tra lại trước khi thử lại.",
|
|
61984
|
+
"ui.providers.phone.heading": "Truy cập từ điện thoại",
|
|
61985
|
+
"ui.providers.phone.outcome.billing_activated_status": "Thanh toán: đã hoàn tất kích hoạt thuê bao; thao tác này chưa được hoàn tác.",
|
|
61986
|
+
"ui.providers.phone.outcome.billing_already_active": "Thanh toán: thuê bao đã được kích hoạt từ trước.",
|
|
61987
|
+
"ui.providers.phone.outcome.billing_not_activated": "Thanh toán: thuê bao hiện tại vẫn cần được kích hoạt.",
|
|
61988
|
+
"ui.providers.phone.outcome.billing_unconfirmed": "Thanh toán: đã yêu cầu kích hoạt nhưng chưa xác nhận kết quả. Hãy kiểm tra tài khoản trước khi thử lại; đừng cho rằng đã hoàn tác.",
|
|
61989
|
+
"ui.providers.phone.outcome.failure_stage": "Chưa hoàn tất: {stage}.",
|
|
61990
|
+
"ui.providers.phone.outcome.reservation_existing": "Địa chỉ điện thoại: giữ nguyên lượt đặt trước hiện có.",
|
|
61991
|
+
"ui.providers.phone.outcome.reservation_saved": "Địa chỉ điện thoại: đã lưu lượt đặt trước trên máy này; khi thử lại sẽ dùng lại lượt đó.",
|
|
61992
|
+
"ui.providers.phone.outcome.reservation_unconfirmed": "Địa chỉ điện thoại: chưa xác nhận kết quả đặt trước; khi thử lại sẽ dùng khóa yêu cầu đã lưu.",
|
|
61993
|
+
"ui.providers.phone.outcome.stage_billing": "kích hoạt thuê bao",
|
|
61994
|
+
"ui.providers.phone.outcome.stage_configuration": "cấu hình tuyến hiện có",
|
|
61995
|
+
"ui.providers.phone.outcome.stage_installation": "cài đặt trình kết nối nền",
|
|
61996
|
+
"ui.providers.phone.outcome.stage_prerequisites": "kiểm tra điều kiện tiên quyết",
|
|
61997
|
+
"ui.providers.phone.outcome.stage_reservation": "đặt trước địa chỉ điện thoại",
|
|
61998
|
+
"ui.providers.phone.outcome.stage_verification": "xác minh kết nối",
|
|
61999
|
+
"ui.providers.phone.progress_heading": "Tiến trình thiết lập",
|
|
62000
|
+
"ui.providers.phone.receipts_heading": "Đã hoàn thành đến nay",
|
|
62001
|
+
"ui.providers.phone.signing_in": "Hoàn tất đăng nhập trong trình duyệt. Trang sẽ tự cập nhật khi xong.",
|
|
62002
|
+
"ui.providers.phone.status.applying": "Đang thiết lập",
|
|
62003
|
+
"ui.providers.phone.status.checking": "Đang kiểm tra",
|
|
62004
|
+
"ui.providers.phone.status.connected": "Đã kết nối",
|
|
62005
|
+
"ui.providers.phone.use_address": "Mở URL ở trên và đăng nhập bằng cùng tài khoản Radient.",
|
|
62006
|
+
"ui.providers.connect_provider_card.connect_a_model_provider_to_start": "Kết nối nhà cung cấp mô hình để bắt đầu",
|
|
62007
|
+
"ui.providers.connect_provider_card.sign_in_with_claude_chatgpt_or_radient": "Đăng nhập bằng Claude, ChatGPT hoặc Radient, hoặc thêm khóa API. Chỉ mất khoảng một phút.",
|
|
62008
|
+
"ui.providers.connect_provider_card.connect_a_provider": "Kết nối nhà cung cấp",
|
|
62009
|
+
"ui.providers.connect_provider_card.use_a_model_on_this_computer": "Dùng mô hình trên máy này",
|
|
62010
|
+
"ui.providers.connect_provider_card.no_model_provider_connected": "Chưa kết nối nhà cung cấp mô hình ·",
|
|
62011
|
+
"ui.providers.connect_provider_card.connect": "Kết nối",
|
|
62012
|
+
"ui.providers.connect_provider_dialog.connect_a_model_provider": "Kết nối nhà cung cấp mô hình",
|
|
62013
|
+
"ui.providers.connect_provider_dialog.your_agents_need_a_model_to_think": "Tác nhân của bạn cần một mô hình để suy luận. Đăng nhập bằng tài khoản hiện có hoặc thêm khóa API.",
|
|
62014
|
+
"ui.providers.provider_catalog.local_models": "mô hình cục bộ",
|
|
62015
|
+
"ui.providers.provider_catalog.more_providers": "Nhà cung cấp khác",
|
|
62016
|
+
"ui.providers.provider_catalog.more_providers_and": "Nhà cung cấp khác: {providers} và {count, plural, other {{count, number, ::group-off} nhà cung cấp nữa}}",
|
|
62017
|
+
"ui.providers.provider_catalog.more_providers_variant_41": "Nhà cung cấp khác: {provider}",
|
|
62018
|
+
"ui.providers.provider_catalog.more_providers_and_variant_42": "Nhà cung cấp khác: {providers} và {last}",
|
|
62019
|
+
"ui.providers.provider_catalog.claude_subscription": "Gói Claude",
|
|
62020
|
+
"ui.providers.provider_catalog.chatgpt_subscription": "Gói ChatGPT",
|
|
62021
|
+
"ui.providers.provider_catalog.chatgpt_with_a_code": "ChatGPT, bằng mã",
|
|
62022
|
+
"ui.providers.provider_catalog.browser_sign_in": "Đăng nhập qua trình duyệt",
|
|
62023
|
+
"ui.providers.provider_catalog.moonshot_account": "Tài khoản Moonshot",
|
|
62024
|
+
"ui.providers.provider_catalog.supergrok_account": "Tài khoản SuperGrok",
|
|
62025
|
+
"ui.providers.provider_catalog.token_plan_account": "Tài khoản Token Plan",
|
|
62026
|
+
"ui.providers.provider_catalog.api_key": "Khóa API",
|
|
62027
|
+
"ui.providers.provider_catalog.sign_in_with_a_code": "Đăng nhập bằng mã",
|
|
62028
|
+
"ui.providers.provider_catalog.sign_in": "Đăng nhập",
|
|
62029
|
+
"ui.providers.provider_catalog.use_your_claude_pro_or_max_plan": "Dùng gói Claude Pro hoặc Max của bạn. Không phát sinh thêm phí.",
|
|
62030
|
+
"ui.providers.provider_catalog.use_your_chatgpt_plus_or_pro_plan": "Dùng gói ChatGPT Plus hoặc Pro của bạn. Không phát sinh thêm phí.",
|
|
62031
|
+
"ui.providers.provider_catalog.use_your_chatgpt_plan_signing_in_with": "Dùng gói ChatGPT của bạn, đăng nhập bằng mã dùng một lần. Không phát sinh thêm phí.",
|
|
62032
|
+
"ui.providers.provider_catalog.one_browser_sign_in_nothing_to_paste": "Đăng nhập một lần qua trình duyệt. Không cần dán gì.",
|
|
62033
|
+
"ui.providers.provider_catalog.sign_in_to_your_account_with_a": "Đăng nhập vào tài khoản {brand} bằng mã dùng một lần.",
|
|
62034
|
+
"ui.providers.provider_catalog.sign_in_with_your_account": "Đăng nhập bằng tài khoản {brand}.",
|
|
62035
|
+
"ui.providers.provider_catalog.use_a_subscription": "Dùng gói thuê bao",
|
|
62036
|
+
"ui.providers.provider_catalog.use_an_api_key": "Dùng khóa API",
|
|
62037
|
+
"ui.providers.provider_catalog.run_models_on_this_computer": "Chạy mô hình trên máy này",
|
|
62038
|
+
"ui.providers.provider_catalog.set_up": "Thiết lập",
|
|
62039
|
+
"ui.providers.provider_catalog.add_key": "Thêm khóa",
|
|
62040
|
+
"ui.providers.provider_catalog.needs_running": "Cần chạy {brand}",
|
|
62041
|
+
"ui.providers.provider_catalog.paste_an_api_key": "Dán khóa API",
|
|
62042
|
+
"ui.providers.provider_catalog.sign_in_with_your_account_variant_93": "Đăng nhập bằng tài khoản {account}",
|
|
62043
|
+
"ui.providers.provider_catalog.signed_in": "Đã đăng nhập",
|
|
62044
|
+
"ui.providers.provider_catalog.on_this_computer": "Trên máy này",
|
|
62045
|
+
"ui.providers.provider_catalog.api_key_saved": "Đã lưu khóa API",
|
|
62046
|
+
"ui.providers.provider_catalog.this_sign_in_is_no_longer_available": "Lần đăng nhập này không còn khả dụng nên đã dừng.",
|
|
62047
|
+
"ui.providers.provider_catalog.the_sign_in_link_expired": "Liên kết đăng nhập đã hết hạn.",
|
|
62048
|
+
"ui.providers.provider_catalog.a_newer_sign_in_replaced_this_one": "Một lần đăng nhập mới hơn đã thay thế lần này.",
|
|
62049
|
+
"ui.providers.provider_catalog.you_cancelled_sign_in": "Bạn đã hủy đăng nhập.",
|
|
62050
|
+
"ui.providers.provider_catalog.didn_t_confirm_the_sign_in": "{brand} chưa xác nhận đăng nhập.",
|
|
62051
|
+
"ui.providers.provider_detail.the_connection_could_not_be_tested": "Không kiểm tra được kết nối.",
|
|
62052
|
+
"ui.providers.provider_detail.checking_whether": "Đang kiểm tra trạng thái: ",
|
|
62053
|
+
"ui.providers.provider_detail.is_running": "đang chạy",
|
|
62054
|
+
"ui.providers.provider_detail.isn_t_answering": "không phản hồi",
|
|
62055
|
+
"ui.providers.provider_detail.at": " tại ",
|
|
62056
|
+
"ui.providers.provider_detail.checking": "Đang kiểm tra",
|
|
62057
|
+
"ui.providers.provider_detail.check_again": "Kiểm tra lại",
|
|
62058
|
+
"ui.providers.provider_detail.hide_key": "Ẩn khóa",
|
|
62059
|
+
"ui.providers.provider_detail.show_key": "Hiện khóa",
|
|
62060
|
+
"ui.providers.provider_detail.connected_variant_163": "{brand} đã kết nối",
|
|
62061
|
+
"ui.providers.provider_detail.signed_in_to_variant_164": "Đã đăng nhập vào {brand}",
|
|
62062
|
+
"ui.providers.provider_detail.is_no_longer_accepting_the_sign_in": "{brand} không còn chấp nhận thông tin đăng nhập đã lưu trên máy này.",
|
|
62063
|
+
"ui.providers.provider_detail.this_app_could_not_confirm_the_sign": "Ứng dụng này không xác nhận được thông tin đăng nhập vào {brand} đã lưu trên máy này.",
|
|
62064
|
+
"ui.providers.provider_detail.the_sign_in_itself_finished_what_follows": "Đăng nhập đã hoàn tất; dưới đây là thông tin đã được thiết lập.",
|
|
62065
|
+
"ui.providers.provider_detail.default_model": "Mô hình mặc định:",
|
|
62066
|
+
"ui.providers.provider_detail.change": "Đổi",
|
|
62067
|
+
"ui.providers.provider_detail.your_default_model_is_unchanged": "Mô hình mặc định của bạn không thay đổi.",
|
|
62068
|
+
"ui.providers.provider_detail.saved_but_not_checked_yet": "Đã lưu, nhưng chưa kiểm tra: ",
|
|
62069
|
+
"ui.providers.provider_detail.the_code_was_not_accepted": "Mã không được chấp nhận.",
|
|
62070
|
+
"ui.providers.provider_detail.the_key_could_not_be_saved": "Không lưu được khóa.",
|
|
62071
|
+
"ui.providers.provider_detail.continue": "Tiếp tục",
|
|
62072
|
+
"ui.providers.provider_detail.done": "Xong",
|
|
62073
|
+
"ui.providers.provider_detail.runs_on_this_computer_and_needs_no": "Chạy trên máy này và không cần tài khoản hoặc khóa. Hãy khởi động ",
|
|
62074
|
+
"ui.providers.provider_detail.then_check_the_connection": ", rồi kiểm tra kết nối.",
|
|
62075
|
+
"ui.providers.provider_detail.this_provider_has_no_supported_sign_in": "Nhà cung cấp này không có phương thức đăng nhập được hỗ trợ trên máy chủ này.",
|
|
62076
|
+
"ui.providers.provider_detail.how_to_connect": "Cách kết nối",
|
|
62077
|
+
"ui.providers.provider_detail.this_local_operator_does_not_check_keys": "Local Operator này không kiểm tra khóa, nên khóa sẽ được kiểm tra khi bạn gửi tin nhắn đầu tiên.",
|
|
62078
|
+
"ui.providers.provider_detail.key_saved": "Đã lưu khóa {brand}",
|
|
62079
|
+
"ui.providers.provider_detail.api_key_variant_215": "Khóa API {brand}",
|
|
62080
|
+
"ui.providers.provider_detail.a_key_is_saved_paste_a_new": "Đã có khóa được lưu. Dán khóa mới để thay thế. Khóa được mã hóa và lưu trên máy này. {brand} tính phí theo lượt dùng, độc lập với mọi gói thuê bao.",
|
|
62081
|
+
"ui.providers.provider_detail.stored_encrypted_on_this_computer_billed_per": "Được mã hóa và lưu trên máy này. {brand} tính phí theo lượt dùng, độc lập với mọi gói thuê bao.",
|
|
62082
|
+
"ui.providers.provider_detail.checking_key": "Đang kiểm tra khóa",
|
|
62083
|
+
"ui.providers.provider_detail.save_key": "Lưu khóa",
|
|
62084
|
+
"ui.providers.provider_detail.you_ll_get_a_code_to_enter": "Bạn sẽ nhận được mã để nhập trên trang của nhà cung cấp.",
|
|
62085
|
+
"ui.providers.provider_detail.it_opens_in_your_browser": "Trang sẽ mở trong trình duyệt của bạn.",
|
|
62086
|
+
"ui.providers.provider_detail.get_a_sign_in_code": "Lấy mã đăng nhập",
|
|
62087
|
+
"ui.providers.provider_detail.continue_in_browser": "Tiếp tục trong trình duyệt",
|
|
62088
|
+
"ui.providers.provider_detail.getting_a_code": "Đang lấy mã",
|
|
62089
|
+
"ui.providers.provider_detail.opening_your_browser": "Đang mở trình duyệt",
|
|
62090
|
+
"ui.providers.provider_detail.cancel": "Hủy",
|
|
62091
|
+
"ui.providers.provider_detail.enter_this_code": "Nhập mã này ",
|
|
62092
|
+
"ui.providers.provider_detail.at_variant_248": "tại {host}",
|
|
62093
|
+
"ui.providers.provider_detail.on_the_sign_in_page": "trên trang đăng nhập",
|
|
62094
|
+
"ui.providers.provider_detail.this_page_updates_on_its_own_once": ". Trang này sẽ tự cập nhật sau khi bạn cho phép.",
|
|
62095
|
+
"ui.providers.provider_detail.copy_code_and_open_page": "Sao chép mã và mở trang",
|
|
62096
|
+
"ui.providers.provider_detail.copy_code": "Sao chép mã",
|
|
62097
|
+
"ui.providers.provider_detail.open_browser_again": "Mở lại trình duyệt",
|
|
62098
|
+
"ui.providers.provider_detail.open_sign_in_page": "Mở trang đăng nhập",
|
|
62099
|
+
"ui.providers.provider_detail.code_from": "Mã từ {host}",
|
|
62100
|
+
"ui.providers.provider_detail.code_from_the_sign_in_page": "Mã từ trang đăng nhập",
|
|
62101
|
+
"ui.providers.provider_detail.sign_in_code": "Mã đăng nhập",
|
|
62102
|
+
"ui.providers.provider_detail.paste_the_code": "Dán mã ",
|
|
62103
|
+
"ui.providers.provider_detail.the_provider": "mà nhà cung cấp",
|
|
62104
|
+
"ui.providers.provider_detail.shows_after_you_approve": "hiển thị sau khi bạn cho phép",
|
|
62105
|
+
"ui.providers.provider_detail.copy_link": "Sao chép liên kết",
|
|
62106
|
+
"ui.providers.provider_detail.finish_signing_in_with_your_browser": "Hoàn tất đăng nhập trong trình duyệt",
|
|
62107
|
+
"ui.providers.provider_detail.we_opened_approve_access_there_and_this": "Đã mở {host}. Hãy cho phép truy cập tại đó; trang này sẽ tự cập nhật.",
|
|
62108
|
+
"ui.providers.provider_detail.your_browser_didn_t_open_open_the": "Trình duyệt không mở được. Hãy tự mở trang đăng nhập hoặc sao chép liên kết.",
|
|
62109
|
+
"ui.providers.provider_detail.opening_approve_access_there_and_this_page": "Đang mở {host}. Hãy cho phép truy cập tại đó; trang này sẽ tự cập nhật.",
|
|
62110
|
+
"ui.providers.provider_detail.browser_showed_a_code_paste_it_here": "Thấy mã trong trình duyệt? Dán mã vào đây",
|
|
62111
|
+
"ui.providers.provider_detail.didn_t_confirm_the_sign_in": "{brand} chưa xác nhận đăng nhập.",
|
|
62112
|
+
"ui.providers.provider_detail.sign_in_didn_t_finish": "Đăng nhập chưa hoàn tất",
|
|
62113
|
+
"ui.providers.provider_detail.try_again": "Thử lại",
|
|
62114
|
+
"ui.providers.provider_detail.use_an_api_key_instead": "Chuyển sang dùng khóa API",
|
|
62115
|
+
"ui.providers.provider_grid.the_default_was_not_changed": "Mô hình mặc định không thay đổi.",
|
|
62116
|
+
"ui.providers.provider_grid.sign_out_did_not_complete": "Đăng xuất chưa hoàn tất.",
|
|
62117
|
+
"ui.providers.provider_grid.loading_providers": "Đang tải nhà cung cấp",
|
|
62118
|
+
"ui.providers.provider_grid.retrying": "Đang thử lại",
|
|
62119
|
+
"ui.providers.provider_grid.retry": "Thử lại",
|
|
62120
|
+
"ui.providers.provider_grid.recommended": "Đề xuất",
|
|
62121
|
+
"ui.providers.provider_grid.suggests": "· Gợi ý ",
|
|
62122
|
+
"ui.providers.provider_grid.close": "Đóng",
|
|
62123
|
+
"ui.providers.provider_grid.default": "Mặc định",
|
|
62124
|
+
"ui.providers.provider_grid.sign_out_of": "Đăng xuất khỏi ",
|
|
62125
|
+
"ui.providers.provider_grid.sign_out": "Đăng xuất",
|
|
62126
|
+
"ui.providers.provider_grid.keep": "Giữ lại",
|
|
62127
|
+
"ui.providers.provider_grid.manage": "Quản lý {brand}",
|
|
62128
|
+
"ui.providers.provider_grid.make_default": "Đặt làm mặc định",
|
|
62129
|
+
"ui.providers.provider_grid.change_model": "Đổi mô hình…",
|
|
62130
|
+
"ui.providers.provider_grid.replace_key": "Thay khóa…",
|
|
62131
|
+
"ui.providers.provider_grid.sign_in_again": "Đăng nhập lại…",
|
|
62132
|
+
"ui.providers.provider_grid.check_connection": "Kiểm tra kết nối",
|
|
62133
|
+
"ui.providers.provider_grid.sign_out_variant_351": "Đăng xuất…",
|
|
62134
|
+
"ui.providers.provider_grid.search_providers": "Tìm nhà cung cấp",
|
|
62135
|
+
"ui.providers.provider_grid.no_providers_match_this_search": "Không có nhà cung cấp khớp.",
|
|
62136
|
+
"ui.providers.provider_grid.the_matching_providers_are_in_the_suggested": "Các nhà cung cấp phù hợp nằm trong các hàng đề xuất ở trên.",
|
|
62137
|
+
"ui.providers.provider_grid.the_matching_providers_are_in_the_connected": "Các nhà cung cấp phù hợp nằm trong các hàng đã kết nối ở trên.",
|
|
62138
|
+
"ui.providers.provider_grid.clear_search": "Xóa tìm kiếm",
|
|
62139
|
+
"ui.providers.provider_grid.connected": "Đã kết nối",
|
|
62140
|
+
"ui.providers.provider_grid.suggested_providers": "Nhà cung cấp đề xuất",
|
|
62141
|
+
"ui.providers.provider_grid.add_a_provider": "Thêm nhà cung cấp",
|
|
62142
|
+
"ui.providers.provider_grid.connect_a_provider": "Kết nối nhà cung cấp",
|
|
62143
|
+
"ui.providers.provider_labels.local": "Cục bộ",
|
|
62144
|
+
"ui.providers.provider_labels.sign_in_or_api_key": "Đăng nhập hoặc khóa API",
|
|
62145
|
+
"ui.providers.provider_labels.unavailable": "Không khả dụng",
|
|
62146
|
+
"ui.providers.provider_labels.radient_no_longer_accepts_the_sign_in": "Radient không còn chấp nhận thông tin đăng nhập đã lưu trên máy này",
|
|
62147
|
+
"ui.providers.provider_labels.this_app_could_not_confirm_the_sign": "Ứng dụng không xác nhận được thông tin đăng nhập đã lưu trên máy này",
|
|
62148
|
+
"ui.providers.provider_labels.no_key_needed": "Không cần khóa",
|
|
62149
|
+
"ui.providers.provider_labels.no_key_needed_needs_a_running_server": "Không cần khóa — cần máy chủ đang chạy",
|
|
62150
|
+
"ui.providers.provider_labels.needs_re_authentication": "Cần xác thực lại",
|
|
62151
|
+
"ui.providers.provider_labels.needs_sign_in": "Cần đăng nhập",
|
|
62152
|
+
"ui.providers.provider_labels.providers_could_not_be_loaded": "Không tải được nhà cung cấp.",
|
|
62153
|
+
"ui.providers.sign_in_flow.sign_in_could_not_start": "Không thể bắt đầu đăng nhập.",
|
|
62154
|
+
"ui.providers.provider_detail.the_sign_in_page": "trang đăng nhập",
|
|
62155
|
+
"ui.providers.provider_grid.row_action": "{action}: {brand}",
|
|
62156
|
+
"ui.providers.provider_detail.code_expiry": "Mã hết hạn sau {minutes, plural, other {{minutes, number, ::group-off} phút}}",
|
|
62157
|
+
"ui.providers.provider_detail.link_expiry": "Liên kết hết hạn sau {minutes, plural, other {{minutes, number, ::group-off} phút}}"
|
|
62158
|
+
};
|
|
60305
62159
|
const viUiSchedules = {
|
|
60306
62160
|
"ui.schedules.count.hidden": "Hiện thêm {hidden, plural, other {{hidden, number, ::group-off} lịch đánh thức}}",
|
|
60307
62161
|
"ui.schedules.count.keep_runs": "Giữ nguyên {left, plural, other {{left, number, ::group-off} lần chạy}} còn lại",
|
|
@@ -61963,6 +63817,19 @@ const zhCNUiCanvas = {
|
|
|
61963
63817
|
"ui.canvas.files.prepareError": "无法为此操作准备本地副本",
|
|
61964
63818
|
"ui.canvas.files.pathCopyNote": "打开文件、打开文件夹及路径相关操作会在此对话的暂存区中创建本地副本。"
|
|
61965
63819
|
};
|
|
63820
|
+
const zhCNUiChatAnalytics = {
|
|
63821
|
+
"ui.chat.analytics.filters.top_level_only": "仅顶级会话",
|
|
63822
|
+
"ui.chat.analytics.search.clear": "清除搜索",
|
|
63823
|
+
"ui.chat.analytics.search.sessions": "搜索会话",
|
|
63824
|
+
"ui.chat.analytics.sections.by_channel": "按渠道",
|
|
63825
|
+
"ui.chat.analytics.sections.by_model": "按模型",
|
|
63826
|
+
"ui.chat.analytics.sections.by_provider": "按提供商",
|
|
63827
|
+
"ui.chat.analytics.sections.by_session": "按会话",
|
|
63828
|
+
"ui.chat.analytics.sections.totals": "总计",
|
|
63829
|
+
"ui.chat.analytics.title": "数据分析",
|
|
63830
|
+
"ui.chat.analytics.toolbar.refreshing": "正在刷新",
|
|
63831
|
+
"ui.chat.analytics.toolbar.this_session_only": "仅当前会话"
|
|
63832
|
+
};
|
|
61966
63833
|
const zhCNUiChatAsks = {
|
|
61967
63834
|
"ui.chat.asks.context.messages_since": "{count, plural, other {自提出这个请求以来你发来了#条消息}}(最后一条消息于{time})",
|
|
61968
63835
|
"ui.chat.asks.dismiss.answered_in_chat.note": "你已在对话中回复过",
|
|
@@ -61991,6 +63858,41 @@ const zhCNUiChatAttachments = {
|
|
|
61991
63858
|
"ui.chat.attachments.saved_path_copied": "已复制保存副本的路径",
|
|
61992
63859
|
"ui.chat.attachments.saved_copy_label": "保存的副本"
|
|
61993
63860
|
};
|
|
63861
|
+
const zhCNUiChatCanonical = {
|
|
63862
|
+
"ui.chat.canonical.sound.batch_attachment_unavailable": "音频附件不可用。",
|
|
63863
|
+
"ui.chat.canonical.sound.player_failed": "无法播放此声音",
|
|
63864
|
+
"ui.chat.canonical.sound.stop.confirm_label": "确认停止请求",
|
|
63865
|
+
"ui.chat.canonical.sound.stop.keep_waiting": "继续等待",
|
|
63866
|
+
"ui.chat.canonical.sound.stop.question": "停止此次生成?",
|
|
63867
|
+
"ui.chat.canonical.sound.stop.request_stop": "请求停止",
|
|
63868
|
+
"ui.chat.canonical.sound.stop.warning": "提供商没有取消接口。生成仍会继续,若产出音频则会计费。系统只能尽力停止,不保证取消成功或免于计费。",
|
|
63869
|
+
"ui.chat.canonical.supplement.adjust_placeholder": "调整图像……",
|
|
63870
|
+
"ui.chat.canonical.supplement.details.attempts": "尝试次数: {count, number, ::group-off}",
|
|
63871
|
+
"ui.chat.canonical.supplement.details.model": "模型: {name}",
|
|
63872
|
+
"ui.chat.canonical.supplement.file_actions.open_in_canvas": "在Canvas中打开",
|
|
63873
|
+
"ui.chat.canonical.supplement.file_actions.open_in_default_app": "用默认应用打开",
|
|
63874
|
+
"ui.chat.canonical.supplement.file_actions.reveal_in_finder": "在Finder中显示",
|
|
63875
|
+
"ui.chat.canonical.supplement.frame.failed": "无法渲染此图像",
|
|
63876
|
+
"ui.chat.canonical.supplement.frame.loading": "正在加载图像……",
|
|
63877
|
+
"ui.chat.canonical.supplement.frame.source": "来源:{name}",
|
|
63878
|
+
"ui.chat.canonical.supplement.preview_unavailable": "无法内嵌预览。此HTML依赖不受支持的资源或文档内容。打开文件即可查看。",
|
|
63879
|
+
"ui.chat.canonical.supplement.send": "发送",
|
|
63880
|
+
"ui.chat.canonical.transcript.connect_provider": "连接提供商",
|
|
63881
|
+
"ui.chat.canonical.transcript.credential_lost": "会话已不再持有此回答提到的凭据。",
|
|
63882
|
+
"ui.chat.canonical.transcript.edit": "编辑",
|
|
63883
|
+
"ui.chat.canonical.transcript.missing_session": "此对话已不存在于此电脑上。",
|
|
63884
|
+
"ui.chat.canonical.transcript.missing_session_detail": "它已被删除,或属于此应用未连接的电脑。",
|
|
63885
|
+
"ui.chat.canonical.transcript.reconnect": "重新连接",
|
|
63886
|
+
"ui.chat.canonical.transcript.reconnecting": "正在重新连接",
|
|
63887
|
+
"ui.chat.canonical.transcript.send_again": "重新发送",
|
|
63888
|
+
"ui.chat.canonical.transcript.source_unavailable": "此对话仍可读取,但暂时无法与来源确认消息顺序。",
|
|
63889
|
+
"ui.chat.canonical.transcript.stale_caption": "显示上次保存的视图——正在检查新消息。",
|
|
63890
|
+
"ui.chat.canonical.transcript.start_new_chat": "开始新对话",
|
|
63891
|
+
"ui.chat.canonical.transcript.stopped_before_finishing": "生成在完成前停止"
|
|
63892
|
+
};
|
|
63893
|
+
const zhCNUiChatCommentaryActions = {
|
|
63894
|
+
"ui.chat.commentary_actions.label": "叙述操作"
|
|
63895
|
+
};
|
|
61994
63896
|
const zhCNUiChatComposer = {
|
|
61995
63897
|
"ui.chat.composer.clear_message": "清空消息",
|
|
61996
63898
|
"ui.chat.composer.message": "消息",
|
|
@@ -62009,6 +63911,8 @@ const zhCNUiChatComposer = {
|
|
|
62009
63911
|
"ui.chat.composer.starting_recording": "正在启动录音",
|
|
62010
63912
|
"ui.chat.composer.start_recording_hint": "开始录音({shortcut},或按住{pushToTalk})",
|
|
62011
63913
|
"ui.chat.composer.processing_audio": "正在处理音频",
|
|
63914
|
+
"ui.chat.composer.dictation_failed_transient": "听写失败:转写服务出现临时故障。请重试。",
|
|
63915
|
+
"ui.chat.composer.dictation_failed_transient_take_kept": "听写失败:转写服务出现临时故障。录音已保留,“重试”即可重新发送。",
|
|
62012
63916
|
"ui.chat.composer.welcome": "今天有什么需要帮忙的?",
|
|
62013
63917
|
"ui.chat.composer.delivery_remedies_hint": "未能送达的消息位于输入框上方的对话中,可选择“重新发送”或“编辑”;按Shift+Tab可移至这些控件。",
|
|
62014
63918
|
"ui.chat.composer.secret_ask_notice": "智能体需要你提供敏感信息。请在请求面板中输入,期间仍可继续聊天。",
|
|
@@ -62070,9 +63974,94 @@ const zhCNUiChatLiveUpdates = {
|
|
|
62070
63974
|
"ui.chat.live_updates.reloading": "正在重新加载……",
|
|
62071
63975
|
"ui.chat.live_updates.reload_failed": "无法重新加载此对话,请重试。"
|
|
62072
63976
|
};
|
|
63977
|
+
const zhCNUiChatPickers = {
|
|
63978
|
+
"ui.chat.pickers.approvals.title": "工具审批",
|
|
63979
|
+
"ui.chat.pickers.commands.title": "命令",
|
|
63980
|
+
"ui.chat.pickers.copy.title": "复制",
|
|
63981
|
+
"ui.chat.pickers.credential.forget": "移除",
|
|
63982
|
+
"ui.chat.pickers.credential.forget_confirmation": "从此会话中移除{name}凭据",
|
|
63983
|
+
"ui.chat.pickers.credential.title": "凭据",
|
|
63984
|
+
"ui.chat.pickers.effort.title": "推理强度",
|
|
63985
|
+
"ui.chat.pickers.fast.premium_acknowledgement": "我了解快速模式每个token的费用可能更高",
|
|
63986
|
+
"ui.chat.pickers.fast.title": "快速模式",
|
|
63987
|
+
"ui.chat.pickers.fork.search_placeholder": "尝试不同的方法……",
|
|
63988
|
+
"ui.chat.pickers.goal.clear": "清除目标",
|
|
63989
|
+
"ui.chat.pickers.goal.mark_done": "标记完成",
|
|
63990
|
+
"ui.chat.pickers.goal.placeholder": "在所有检查通过后发布版本",
|
|
63991
|
+
"ui.chat.pickers.goal.title": "会话目标",
|
|
63992
|
+
"ui.chat.pickers.login.title": "登录提供商",
|
|
63993
|
+
"ui.chat.pickers.logout.confirm": "移除此账户已保存的凭据",
|
|
63994
|
+
"ui.chat.pickers.logout.title": "退出登录",
|
|
63995
|
+
"ui.chat.pickers.loop.cancel": "取消循环",
|
|
63996
|
+
"ui.chat.pickers.loop.title": "循环",
|
|
63997
|
+
"ui.chat.pickers.models.connect_provider": "连接提供商",
|
|
63998
|
+
"ui.chat.pickers.models.native_details": "原生详情 — {name}",
|
|
63999
|
+
"ui.chat.pickers.models.set_as_default": "将当前模型设为默认",
|
|
64000
|
+
"ui.chat.pickers.models.title": "模型",
|
|
64001
|
+
"ui.chat.pickers.new_session.title": "新建对话",
|
|
64002
|
+
"ui.chat.pickers.profile.loading_detail": "正在加载详情",
|
|
64003
|
+
"ui.chat.pickers.reload.title": "重新加载此对话",
|
|
64004
|
+
"ui.chat.pickers.rename.title": "重命名对话",
|
|
64005
|
+
"ui.chat.pickers.resume.title": "恢复对话",
|
|
64006
|
+
"ui.chat.pickers.skills.loading": "正在加载",
|
|
64007
|
+
"ui.chat.pickers.skills.title": "技能",
|
|
64008
|
+
"ui.chat.pickers.stop.all_sessions": "所有会话({count, number, ::group-off})",
|
|
64009
|
+
"ui.chat.pickers.stop.confirm": "{count, plural, other {立即停止{count, number, ::group-off}个会话}}",
|
|
64010
|
+
"ui.chat.pickers.stop.title": "停止",
|
|
64011
|
+
"ui.chat.pickers.theme.title": "主题"
|
|
64012
|
+
};
|
|
62073
64013
|
const zhCNUiChatResponseActions = {
|
|
62074
64014
|
"ui.chat.response_actions.label": "回复操作"
|
|
62075
64015
|
};
|
|
64016
|
+
const zhCNUiChatRunDetails = {
|
|
64017
|
+
"ui.chat.run_details.jobs": "后台任务",
|
|
64018
|
+
"ui.chat.run_details.keep": "保留"
|
|
64019
|
+
};
|
|
64020
|
+
const zhCNUiChatSidebar = {
|
|
64021
|
+
"ui.chat.sidebar.agents.clear_filter": "清除智能体筛选",
|
|
64022
|
+
"ui.chat.sidebar.agents.create": "创建智能体",
|
|
64023
|
+
"ui.chat.sidebar.agents.dismiss_offer": "忽略内置智能体建议",
|
|
64024
|
+
"ui.chat.sidebar.agents.empty": "暂无智能体",
|
|
64025
|
+
"ui.chat.sidebar.agents.filter": "筛选智能体",
|
|
64026
|
+
"ui.chat.sidebar.agents.loading": "正在加载智能体……",
|
|
64027
|
+
"ui.chat.sidebar.agents.no_match": "没有匹配的智能体",
|
|
64028
|
+
"ui.chat.sidebar.drafts.clear_all": "全部清除",
|
|
64029
|
+
"ui.chat.sidebar.drafts.clear_all_label": "清除所有草稿",
|
|
64030
|
+
"ui.chat.sidebar.header.create": "新建智能体或团队",
|
|
64031
|
+
"ui.chat.sidebar.header.create_agent": "新建智能体",
|
|
64032
|
+
"ui.chat.sidebar.header.create_team": "新建团队",
|
|
64033
|
+
"ui.chat.sidebar.header.open_agent": "打开智能体……",
|
|
64034
|
+
"ui.chat.sidebar.header.search": "搜索对话和智能体",
|
|
64035
|
+
"ui.chat.sidebar.header.view_options": "视图选项",
|
|
64036
|
+
"ui.chat.sidebar.list.connecting": "正在连接对话……",
|
|
64037
|
+
"ui.chat.sidebar.list.empty": "暂无对话。请选择智能体、团队或“新建对话”。",
|
|
64038
|
+
"ui.chat.sidebar.list.loading_more": "正在加载更多……",
|
|
64039
|
+
"ui.chat.sidebar.list.offline": "未连接后端——显示最近已知状态。",
|
|
64040
|
+
"ui.chat.sidebar.list.retry_refresh": "重新刷新",
|
|
64041
|
+
"ui.chat.sidebar.list.truncated_legacy": "最多显示500个对话。更早的对话仍可在终端中查看。",
|
|
64042
|
+
"ui.chat.sidebar.nav.chats": "对话",
|
|
64043
|
+
"ui.chat.sidebar.pins.drag_title": "拖动排序 · Esc取消",
|
|
64044
|
+
"ui.chat.sidebar.pins.failure": "{action, select, pin {无法置顶“{title}”。} unpin {无法取消置顶“{title}”。} other {无法更新“{title}”。}}",
|
|
64045
|
+
"ui.chat.sidebar.row.archived_suffix": ",已归档",
|
|
64046
|
+
"ui.chat.sidebar.row.in_conversation": "对话内匹配",
|
|
64047
|
+
"ui.chat.sidebar.row.matched_in_conversation": ",对话内容匹配",
|
|
64048
|
+
"ui.chat.sidebar.row.not_sent": "尚未发送",
|
|
64049
|
+
"ui.chat.sidebar.row_menu.copy_id": "复制会话ID",
|
|
64050
|
+
"ui.chat.sidebar.row_menu.fork": "分叉对话",
|
|
64051
|
+
"ui.chat.sidebar.row_menu.move_down": "下移对话",
|
|
64052
|
+
"ui.chat.sidebar.row_menu.move_up": "上移对话",
|
|
64053
|
+
"ui.chat.sidebar.row_menu.rename": "重命名对话",
|
|
64054
|
+
"ui.chat.sidebar.search.clear": "清除搜索",
|
|
64055
|
+
"ui.chat.sidebar.search.include_archived": "包含已归档对话",
|
|
64056
|
+
"ui.chat.sidebar.search.names_only": "仅搜索对话名称。更新Local Operator即可搜索对话内容。",
|
|
64057
|
+
"ui.chat.sidebar.search.no_match": "对话中没有与“{query}”匹配的内容。",
|
|
64058
|
+
"ui.chat.sidebar.search.placeholder": "筛选对话和智能体",
|
|
64059
|
+
"ui.chat.sidebar.search.searching": "正在搜索对话……",
|
|
64060
|
+
"ui.chat.sidebar.search.too_long": "搜索词最多{max, number, ::group-off}个字符。当前搜索词超出限制,因此仅搜索对话名称。",
|
|
64061
|
+
"ui.chat.sidebar.search.unavailable": "对话搜索不可用,当前结果仅为名称匹配。",
|
|
64062
|
+
"ui.chat.sidebar.teams.create": "创建团队",
|
|
64063
|
+
"ui.chat.sidebar.teams.loading": "正在加载团队……"
|
|
64064
|
+
};
|
|
62076
64065
|
const zhCNUiChatSidebarView = {
|
|
62077
64066
|
"ui.chat.sidebar_view.group_by": "分组方式",
|
|
62078
64067
|
"ui.chat.sidebar_view.time_basis": "时间依据",
|
|
@@ -62097,6 +64086,12 @@ const zhCNUiChatSidebarView = {
|
|
|
62097
64086
|
"ui.chat.sidebar_view.section.agents": "智能体",
|
|
62098
64087
|
"ui.chat.sidebar_view.section.teams": "团队"
|
|
62099
64088
|
};
|
|
64089
|
+
const zhCNUiChatTagDialogs = {
|
|
64090
|
+
"ui.chat.tag_dialogs.deleted_name": "已删除“{name}”",
|
|
64091
|
+
"ui.chat.tag_dialogs.created_assigned": "已创建“{name}”并添加到此对话",
|
|
64092
|
+
"ui.chat.tag_dialogs.assign_created_failed": "已创建“{name}”,但未能添加到此对话。从列表中选择该标签即可添加。",
|
|
64093
|
+
"ui.chat.tag_dialogs.changed_elsewhere": "标签已在其他位置更改。列表现已显示最新标签;重新选择即可应用更改。"
|
|
64094
|
+
};
|
|
62100
64095
|
const zhCNUiChatTags = {
|
|
62101
64096
|
"ui.chat.tags.label": "标签",
|
|
62102
64097
|
"ui.chat.tags.menu": "标签……",
|
|
@@ -62382,6 +64377,13 @@ const zhCNUiCommonErrors = {
|
|
|
62382
64377
|
"ui.common.errors.error_boundary.stack_trace": "堆栈轨迹",
|
|
62383
64378
|
"ui.common.errors.error_boundary.the_application_encountered_an_error_try_again_or_contact_support": "应用出现错误。请重试,若问题仍然存在,请联系支持团队。"
|
|
62384
64379
|
};
|
|
64380
|
+
const zhCNUiCommonFileActions = {
|
|
64381
|
+
"ui.common.file_actions.copy_file_path": "复制文件路径",
|
|
64382
|
+
"ui.common.file_actions.open_file": "打开文件",
|
|
64383
|
+
"ui.common.file_actions.open_folder": "打开所在文件夹",
|
|
64384
|
+
"ui.common.file_actions.preview": "预览",
|
|
64385
|
+
"ui.common.file_actions.show_in_canvas": "在Canvas中显示"
|
|
64386
|
+
};
|
|
62385
64387
|
const zhCNUiCommonForms = {
|
|
62386
64388
|
"ui.common.forms.autocomplete_field.cancel_editing": "取消编辑{label}",
|
|
62387
64389
|
"ui.common.forms.autocomplete_field.enter_value": "输入值……",
|
|
@@ -62569,6 +64571,12 @@ const zhCNUiCommonUpdates = {
|
|
|
62569
64571
|
"ui.common.updates.wait.minutes_seconds": "已等待{minutes, plural, other {{minutes, number, ::group-off}分钟}}{seconds, plural, other {{seconds, number, ::group-off}秒}}",
|
|
62570
64572
|
"ui.common.updates.wait.seconds": "已等待{seconds, plural, other {{seconds, number, ::group-off}秒}}"
|
|
62571
64573
|
};
|
|
64574
|
+
const zhCNUiCommonViewer = {
|
|
64575
|
+
"ui.common.viewer.opening": "正在打开……",
|
|
64576
|
+
"ui.common.viewer.reset_view": "重置视图",
|
|
64577
|
+
"ui.common.viewer.zoom_in": "放大",
|
|
64578
|
+
"ui.common.viewer.zoom_out": "缩小"
|
|
64579
|
+
};
|
|
62572
64580
|
const zhCNUiConsole = {
|
|
62573
64581
|
"ui.console.capacity.summary": "应用中运行{live, number, ::group-off}个,上限{limit, number, ::group-off}个",
|
|
62574
64582
|
"ui.console.capacity.summary_compact": "{live, number, ::group-off}/{limit, number, ::group-off} · 已保留{archived, number, ::group-off}个",
|
|
@@ -63160,11 +65168,9 @@ const zhCNUiMesh = {
|
|
|
63160
65168
|
"ui.mesh.mesh_card.move_to": "移至{device}",
|
|
63161
65169
|
"ui.mesh.mesh_card.copy_to": "复制到{device}",
|
|
63162
65170
|
"ui.mesh.mesh_card.conversation_count": "{count, plural, other {{count, number, ::group-off}个对话}}",
|
|
63163
|
-
"ui.mesh.mesh_card.revoked_membership": "成员资格已撤销",
|
|
63164
65171
|
"ui.mesh.mesh_card.shown_of": "{shown, number, ::group-off}/{total, number, ::group-off}",
|
|
63165
65172
|
"ui.mesh.mesh_card.device_details": "{device}的详情",
|
|
63166
65173
|
"ui.mesh.mesh_card.memberships": "所属网络",
|
|
63167
|
-
"ui.mesh.mesh_card.revoked": "· 已撤销",
|
|
63168
65174
|
"ui.mesh.mesh_card.remove_from": "从网络中移除:",
|
|
63169
65175
|
"ui.mesh.mesh_card.conversations": "对话",
|
|
63170
65176
|
"ui.mesh.mesh_card.this_device_did_not_report_its_conversations": "此设备未报告对话信息。",
|
|
@@ -63223,8 +65229,8 @@ const zhCNUiMesh = {
|
|
|
63223
65229
|
"ui.mesh.mesh_list.on_device_no_answer": "位于{device}(未响应)",
|
|
63224
65230
|
"ui.mesh.mesh_list.sort_devices_by": "设备排序依据",
|
|
63225
65231
|
"ui.mesh.mesh_list.epoch": "成员版本{epoch, number, ::group-off}",
|
|
63226
|
-
"ui.mesh.mesh_list.revoked_count": "
|
|
63227
|
-
"ui.mesh.mesh_list.
|
|
65232
|
+
"ui.mesh.mesh_list.revoked_count": "{count, plural, other {{count, number, ::group-off}项已撤销}}",
|
|
65233
|
+
"ui.mesh.mesh_list.revoked_toggle_label": "显示已撤销的成员资格",
|
|
63228
65234
|
"ui.mesh.mesh_list.member": "成员",
|
|
63229
65235
|
"ui.mesh.mesh_list.move_conversation": "移动{conversation}",
|
|
63230
65236
|
"ui.mesh.mesh_list.show_all_panel": "在面板中显示全部{count, plural, other {{count, number, ::group-off}个}}",
|
|
@@ -65098,16 +67104,23 @@ const bundledCatalogues = {
|
|
|
65098
67104
|
...esUiBrowserChrome,
|
|
65099
67105
|
...esUiBrowser,
|
|
65100
67106
|
...esUiCanvas,
|
|
67107
|
+
...esUiChatAnalytics,
|
|
65101
67108
|
...esUiChatAsks,
|
|
65102
67109
|
...esUiChatAttachments,
|
|
67110
|
+
...esUiChatCanonical,
|
|
67111
|
+
...esUiChatCommentaryActions,
|
|
65103
67112
|
...esUiChatComposer,
|
|
65104
67113
|
...esUiChatComposerMedia,
|
|
65105
67114
|
...esUiChatDialogs,
|
|
65106
67115
|
...esUiChatHeader,
|
|
65107
67116
|
...esUiChat,
|
|
65108
67117
|
...esUiChatLiveUpdates,
|
|
67118
|
+
...esUiChatPickers,
|
|
65109
67119
|
...esUiChatResponseActions,
|
|
67120
|
+
...esUiChatRunDetails,
|
|
67121
|
+
...esUiChatSidebar,
|
|
65110
67122
|
...esUiChatSidebarView,
|
|
67123
|
+
...esUiChatTagDialogs,
|
|
65111
67124
|
...esUiChatTags,
|
|
65112
67125
|
...esUiChatTranscriptCopy,
|
|
65113
67126
|
...esUiCodeReview,
|
|
@@ -65117,10 +67130,12 @@ const bundledCatalogues = {
|
|
|
65117
67130
|
...esUiCommonConnection,
|
|
65118
67131
|
...esUiCommonEditing,
|
|
65119
67132
|
...esUiCommonErrors,
|
|
67133
|
+
...esUiCommonFileActions,
|
|
65120
67134
|
...esUiCommonForms,
|
|
65121
67135
|
...esUiCommonLoading,
|
|
65122
67136
|
...esUiCommonModels,
|
|
65123
67137
|
...esUiCommonUpdates,
|
|
67138
|
+
...esUiCommonViewer,
|
|
65124
67139
|
...esUiConsole,
|
|
65125
67140
|
...esUiHubComments,
|
|
65126
67141
|
...esUiHub,
|
|
@@ -65164,16 +67179,23 @@ const bundledCatalogues = {
|
|
|
65164
67179
|
...frUiBrowserChrome,
|
|
65165
67180
|
...frUiBrowser,
|
|
65166
67181
|
...frUiCanvas,
|
|
67182
|
+
...frUiChatAnalytics,
|
|
65167
67183
|
...frUiChatAsks,
|
|
65168
67184
|
...frUiChatAttachments,
|
|
67185
|
+
...frUiChatCanonical,
|
|
67186
|
+
...frUiChatCommentaryActions,
|
|
65169
67187
|
...frUiChatComposer,
|
|
65170
67188
|
...frUiChatComposerMedia,
|
|
65171
67189
|
...frUiChatDialogs,
|
|
65172
67190
|
...frUiChatHeader,
|
|
65173
67191
|
...frUiChat,
|
|
65174
67192
|
...frUiChatLiveUpdates,
|
|
67193
|
+
...frUiChatPickers,
|
|
65175
67194
|
...frUiChatResponseActions,
|
|
67195
|
+
...frUiChatRunDetails,
|
|
67196
|
+
...frUiChatSidebar,
|
|
65176
67197
|
...frUiChatSidebarView,
|
|
67198
|
+
...frUiChatTagDialogs,
|
|
65177
67199
|
...frUiChatTags,
|
|
65178
67200
|
...frUiChatTranscriptCopy,
|
|
65179
67201
|
...frUiCodeReview,
|
|
@@ -65183,10 +67205,12 @@ const bundledCatalogues = {
|
|
|
65183
67205
|
...frUiCommonConnection,
|
|
65184
67206
|
...frUiCommonEditing,
|
|
65185
67207
|
...frUiCommonErrors,
|
|
67208
|
+
...frUiCommonFileActions,
|
|
65186
67209
|
...frUiCommonForms,
|
|
65187
67210
|
...frUiCommonLoading,
|
|
65188
67211
|
...frUiCommonModels,
|
|
65189
67212
|
...frUiCommonUpdates,
|
|
67213
|
+
...frUiCommonViewer,
|
|
65190
67214
|
...frUiConsole,
|
|
65191
67215
|
...frUiHubComments,
|
|
65192
67216
|
...frUiHub,
|
|
@@ -65230,27 +67254,38 @@ const bundledCatalogues = {
|
|
|
65230
67254
|
...hiUiBrowserChrome,
|
|
65231
67255
|
...hiUiBrowser,
|
|
65232
67256
|
...hiUiCanvas,
|
|
67257
|
+
...hiUiChatAnalytics,
|
|
65233
67258
|
...hiUiChatAsks,
|
|
65234
67259
|
...hiUiChatAttachments,
|
|
67260
|
+
...hiUiChatCanonical,
|
|
67261
|
+
...hiUiChatCommentaryActions,
|
|
65235
67262
|
...hiUiChatComposer,
|
|
65236
67263
|
...hiUiChatComposerMedia,
|
|
65237
67264
|
...hiUiChatDialogs,
|
|
65238
67265
|
...hiUiChatHeader,
|
|
65239
67266
|
...hiUiChat,
|
|
65240
67267
|
...hiUiChatLiveUpdates,
|
|
67268
|
+
...hiUiChatPickers,
|
|
65241
67269
|
...hiUiChatResponseActions,
|
|
67270
|
+
...hiUiChatRunDetails,
|
|
67271
|
+
...hiUiChatSidebar,
|
|
65242
67272
|
...hiUiChatSidebarView,
|
|
67273
|
+
...hiUiChatTagDialogs,
|
|
65243
67274
|
...hiUiChatTags,
|
|
67275
|
+
...hiUiChatTranscriptCopy,
|
|
65244
67276
|
...hiUiCodeReview,
|
|
65245
67277
|
...hiUiCommandPalette,
|
|
67278
|
+
...hiUiCommonAccount,
|
|
65246
67279
|
...hiUiCommonActions,
|
|
65247
67280
|
...hiUiCommonConnection,
|
|
65248
67281
|
...hiUiCommonEditing,
|
|
65249
67282
|
...hiUiCommonErrors,
|
|
67283
|
+
...hiUiCommonFileActions,
|
|
65250
67284
|
...hiUiCommonForms,
|
|
65251
67285
|
...hiUiCommonLoading,
|
|
65252
67286
|
...hiUiCommonModels,
|
|
65253
67287
|
...hiUiCommonUpdates,
|
|
67288
|
+
...hiUiCommonViewer,
|
|
65254
67289
|
...hiUiConsole,
|
|
65255
67290
|
...hiUiHubComments,
|
|
65256
67291
|
...hiUiHub,
|
|
@@ -65259,6 +67294,7 @@ const bundledCatalogues = {
|
|
|
65259
67294
|
...hiUiLibrary,
|
|
65260
67295
|
...hiUiMesh,
|
|
65261
67296
|
...hiUiOnboarding,
|
|
67297
|
+
...hiUiPresence,
|
|
65262
67298
|
...hiUiProjects,
|
|
65263
67299
|
...hiUiProviders,
|
|
65264
67300
|
...hiUiSchedules,
|
|
@@ -65293,17 +67329,25 @@ const bundledCatalogues = {
|
|
|
65293
67329
|
...ruUiBrowserChrome,
|
|
65294
67330
|
...ruUiBrowser,
|
|
65295
67331
|
...ruUiCanvas,
|
|
67332
|
+
...ruUiChatAnalytics,
|
|
65296
67333
|
...ruUiChatAsks,
|
|
65297
67334
|
...ruUiChatAttachments,
|
|
67335
|
+
...ruUiChatCanonical,
|
|
67336
|
+
...ruUiChatCommentaryActions,
|
|
65298
67337
|
...ruUiChatComposer,
|
|
65299
67338
|
...ruUiChatComposerMedia,
|
|
65300
67339
|
...ruUiChatDialogs,
|
|
65301
67340
|
...ruUiChatHeader,
|
|
65302
67341
|
...ruUiChat,
|
|
65303
67342
|
...ruUiChatLiveUpdates,
|
|
67343
|
+
...ruUiChatPickers,
|
|
65304
67344
|
...ruUiChatResponseActions,
|
|
67345
|
+
...ruUiChatRunDetails,
|
|
67346
|
+
...ruUiChatSidebar,
|
|
65305
67347
|
...ruUiChatSidebarView,
|
|
67348
|
+
...ruUiChatTagDialogs,
|
|
65306
67349
|
...ruUiChatTags,
|
|
67350
|
+
...ruUiChatTranscriptCopy,
|
|
65307
67351
|
...ruUiCodeReview,
|
|
65308
67352
|
...ruUiCommandPalette,
|
|
65309
67353
|
...ruUiCommonAccount,
|
|
@@ -65311,10 +67355,12 @@ const bundledCatalogues = {
|
|
|
65311
67355
|
...ruUiCommonConnection,
|
|
65312
67356
|
...ruUiCommonEditing,
|
|
65313
67357
|
...ruUiCommonErrors,
|
|
67358
|
+
...ruUiCommonFileActions,
|
|
65314
67359
|
...ruUiCommonForms,
|
|
65315
67360
|
...ruUiCommonLoading,
|
|
65316
67361
|
...ruUiCommonModels,
|
|
65317
67362
|
...ruUiCommonUpdates,
|
|
67363
|
+
...ruUiCommonViewer,
|
|
65318
67364
|
...ruUiConsole,
|
|
65319
67365
|
...ruUiHubComments,
|
|
65320
67366
|
...ruUiHub,
|
|
@@ -65323,6 +67369,7 @@ const bundledCatalogues = {
|
|
|
65323
67369
|
...ruUiLibrary,
|
|
65324
67370
|
...ruUiMesh,
|
|
65325
67371
|
...ruUiOnboarding,
|
|
67372
|
+
...ruUiPresence,
|
|
65326
67373
|
...ruUiProjects,
|
|
65327
67374
|
...ruUiProviders,
|
|
65328
67375
|
...ruUiSchedules,
|
|
@@ -65357,17 +67404,25 @@ const bundledCatalogues = {
|
|
|
65357
67404
|
...urUiBrowserChrome,
|
|
65358
67405
|
...urUiBrowser,
|
|
65359
67406
|
...urUiCanvas,
|
|
67407
|
+
...urUiChatAnalytics,
|
|
65360
67408
|
...urUiChatAsks,
|
|
65361
67409
|
...urUiChatAttachments,
|
|
67410
|
+
...urUiChatCanonical,
|
|
67411
|
+
...urUiChatCommentaryActions,
|
|
65362
67412
|
...urUiChatComposer,
|
|
65363
67413
|
...urUiChatComposerMedia,
|
|
65364
67414
|
...urUiChatDialogs,
|
|
65365
67415
|
...urUiChatHeader,
|
|
65366
67416
|
...urUiChat,
|
|
65367
67417
|
...urUiChatLiveUpdates,
|
|
67418
|
+
...urUiChatPickers,
|
|
65368
67419
|
...urUiChatResponseActions,
|
|
67420
|
+
...urUiChatRunDetails,
|
|
67421
|
+
...urUiChatSidebar,
|
|
65369
67422
|
...urUiChatSidebarView,
|
|
67423
|
+
...urUiChatTagDialogs,
|
|
65370
67424
|
...urUiChatTags,
|
|
67425
|
+
...urUiChatTranscriptCopy,
|
|
65371
67426
|
...urUiCodeReview,
|
|
65372
67427
|
...urUiCommandPalette,
|
|
65373
67428
|
...urUiCommonAccount,
|
|
@@ -65375,10 +67430,12 @@ const bundledCatalogues = {
|
|
|
65375
67430
|
...urUiCommonConnection,
|
|
65376
67431
|
...urUiCommonEditing,
|
|
65377
67432
|
...urUiCommonErrors,
|
|
67433
|
+
...urUiCommonFileActions,
|
|
65378
67434
|
...urUiCommonForms,
|
|
65379
67435
|
...urUiCommonLoading,
|
|
65380
67436
|
...urUiCommonModels,
|
|
65381
67437
|
...urUiCommonUpdates,
|
|
67438
|
+
...urUiCommonViewer,
|
|
65382
67439
|
...urUiConsole,
|
|
65383
67440
|
...urUiHubComments,
|
|
65384
67441
|
...urUiHub,
|
|
@@ -65387,6 +67444,7 @@ const bundledCatalogues = {
|
|
|
65387
67444
|
...urUiLibrary,
|
|
65388
67445
|
...urUiMesh,
|
|
65389
67446
|
...urUiOnboarding,
|
|
67447
|
+
...urUiPresence,
|
|
65390
67448
|
...urUiProjects,
|
|
65391
67449
|
...urUiProviders,
|
|
65392
67450
|
...urUiSchedules,
|
|
@@ -65421,17 +67479,25 @@ const bundledCatalogues = {
|
|
|
65421
67479
|
...viUiBrowserChrome,
|
|
65422
67480
|
...viUiBrowser,
|
|
65423
67481
|
...viUiCanvas,
|
|
67482
|
+
...viUiChatAnalytics,
|
|
65424
67483
|
...viUiChatAsks,
|
|
65425
67484
|
...viUiChatAttachments,
|
|
67485
|
+
...viUiChatCanonical,
|
|
67486
|
+
...viUiChatCommentaryActions,
|
|
65426
67487
|
...viUiChatComposer,
|
|
65427
67488
|
...viUiChatComposerMedia,
|
|
65428
67489
|
...viUiChatDialogs,
|
|
65429
67490
|
...viUiChatHeader,
|
|
65430
67491
|
...viUiChat,
|
|
65431
67492
|
...viUiChatLiveUpdates,
|
|
67493
|
+
...viUiChatPickers,
|
|
65432
67494
|
...viUiChatResponseActions,
|
|
67495
|
+
...viUiChatRunDetails,
|
|
67496
|
+
...viUiChatSidebar,
|
|
65433
67497
|
...viUiChatSidebarView,
|
|
67498
|
+
...viUiChatTagDialogs,
|
|
65434
67499
|
...viUiChatTags,
|
|
67500
|
+
...viUiChatTranscriptCopy,
|
|
65435
67501
|
...viUiCodeReview,
|
|
65436
67502
|
...viUiCommandPalette,
|
|
65437
67503
|
...viUiCommonAccount,
|
|
@@ -65439,10 +67505,12 @@ const bundledCatalogues = {
|
|
|
65439
67505
|
...viUiCommonConnection,
|
|
65440
67506
|
...viUiCommonEditing,
|
|
65441
67507
|
...viUiCommonErrors,
|
|
67508
|
+
...viUiCommonFileActions,
|
|
65442
67509
|
...viUiCommonForms,
|
|
65443
67510
|
...viUiCommonLoading,
|
|
65444
67511
|
...viUiCommonModels,
|
|
65445
67512
|
...viUiCommonUpdates,
|
|
67513
|
+
...viUiCommonViewer,
|
|
65446
67514
|
...viUiConsole,
|
|
65447
67515
|
...viUiHubComments,
|
|
65448
67516
|
...viUiHub,
|
|
@@ -65451,7 +67519,9 @@ const bundledCatalogues = {
|
|
|
65451
67519
|
...viUiLibrary,
|
|
65452
67520
|
...viUiMesh,
|
|
65453
67521
|
...viUiOnboarding,
|
|
67522
|
+
...viUiPresence,
|
|
65454
67523
|
...viUiProjects,
|
|
67524
|
+
...viUiProviders,
|
|
65455
67525
|
...viUiSchedules,
|
|
65456
67526
|
...viUiSettingsAccount,
|
|
65457
67527
|
...viUiSettingsAppearance,
|
|
@@ -65484,16 +67554,23 @@ const bundledCatalogues = {
|
|
|
65484
67554
|
...zhCNUiBrowserChrome,
|
|
65485
67555
|
...zhCNUiBrowser,
|
|
65486
67556
|
...zhCNUiCanvas,
|
|
67557
|
+
...zhCNUiChatAnalytics,
|
|
65487
67558
|
...zhCNUiChatAsks,
|
|
65488
67559
|
...zhCNUiChatAttachments,
|
|
67560
|
+
...zhCNUiChatCanonical,
|
|
67561
|
+
...zhCNUiChatCommentaryActions,
|
|
65489
67562
|
...zhCNUiChatComposer,
|
|
65490
67563
|
...zhCNUiChatComposerMedia,
|
|
65491
67564
|
...zhCNUiChatDialogs,
|
|
65492
67565
|
...zhCNUiChatHeader,
|
|
65493
67566
|
...zhCNUiChat,
|
|
65494
67567
|
...zhCNUiChatLiveUpdates,
|
|
67568
|
+
...zhCNUiChatPickers,
|
|
65495
67569
|
...zhCNUiChatResponseActions,
|
|
67570
|
+
...zhCNUiChatRunDetails,
|
|
67571
|
+
...zhCNUiChatSidebar,
|
|
65496
67572
|
...zhCNUiChatSidebarView,
|
|
67573
|
+
...zhCNUiChatTagDialogs,
|
|
65497
67574
|
...zhCNUiChatTags,
|
|
65498
67575
|
...zhCNUiChatTranscriptCopy,
|
|
65499
67576
|
...zhCNUiCodeReview,
|
|
@@ -65503,10 +67580,12 @@ const bundledCatalogues = {
|
|
|
65503
67580
|
...zhCNUiCommonConnection,
|
|
65504
67581
|
...zhCNUiCommonEditing,
|
|
65505
67582
|
...zhCNUiCommonErrors,
|
|
67583
|
+
...zhCNUiCommonFileActions,
|
|
65506
67584
|
...zhCNUiCommonForms,
|
|
65507
67585
|
...zhCNUiCommonLoading,
|
|
65508
67586
|
...zhCNUiCommonModels,
|
|
65509
67587
|
...zhCNUiCommonUpdates,
|
|
67588
|
+
...zhCNUiCommonViewer,
|
|
65510
67589
|
...zhCNUiConsole,
|
|
65511
67590
|
...zhCNUiHubComments,
|
|
65512
67591
|
...zhCNUiHub,
|
|
@@ -65827,31 +67906,31 @@ function normalise(value) {
|
|
|
65827
67906
|
return String(value ?? "").replace(/\s+/g, " ").trim();
|
|
65828
67907
|
}
|
|
65829
67908
|
function readValue(raw) {
|
|
65830
|
-
const
|
|
65831
|
-
if (!
|
|
65832
|
-
const quote =
|
|
67909
|
+
const text2 = raw.trim();
|
|
67910
|
+
if (!text2) return null;
|
|
67911
|
+
const quote = text2[0];
|
|
65833
67912
|
if (quote === '"' || quote === "'") {
|
|
65834
67913
|
let value = "";
|
|
65835
|
-
for (let index = 1; index <
|
|
65836
|
-
const char =
|
|
65837
|
-
if (char === "\\" && index + 1 <
|
|
65838
|
-
value +=
|
|
67914
|
+
for (let index = 1; index < text2.length; index += 1) {
|
|
67915
|
+
const char = text2[index] ?? "";
|
|
67916
|
+
if (char === "\\" && index + 1 < text2.length) {
|
|
67917
|
+
value += text2[index + 1] ?? "";
|
|
65839
67918
|
index += 1;
|
|
65840
67919
|
continue;
|
|
65841
67920
|
}
|
|
65842
67921
|
if (char === quote) {
|
|
65843
|
-
return index ===
|
|
67922
|
+
return index === text2.length - 1 ? value : null;
|
|
65844
67923
|
}
|
|
65845
67924
|
value += char;
|
|
65846
67925
|
}
|
|
65847
67926
|
return null;
|
|
65848
67927
|
}
|
|
65849
|
-
if (/[\[\]]/.test(
|
|
65850
|
-
return
|
|
67928
|
+
if (/[\[\]]/.test(text2) || text2.startsWith("*")) return null;
|
|
67929
|
+
return text2;
|
|
65851
67930
|
}
|
|
65852
67931
|
function parseLocator(value) {
|
|
65853
|
-
const
|
|
65854
|
-
const match = /^(role|label|text)(\*?)=([\s\S]+)$/i.exec(
|
|
67932
|
+
const text2 = value.trim();
|
|
67933
|
+
const match = /^(role|label|text)(\*?)=([\s\S]+)$/i.exec(text2);
|
|
65855
67934
|
if (!match) return null;
|
|
65856
67935
|
const kind = (match[1] ?? "").toLowerCase();
|
|
65857
67936
|
const prefixSubstring = match[2] === "*";
|
|
@@ -66422,8 +68501,8 @@ function compactAX(nodes, epoch, options = {}) {
|
|
|
66422
68501
|
scoped: scopeId !== void 0
|
|
66423
68502
|
};
|
|
66424
68503
|
}
|
|
66425
|
-
function windowSnapshot(
|
|
66426
|
-
const lines =
|
|
68504
|
+
function windowSnapshot(text2, options = {}) {
|
|
68505
|
+
const lines = text2 ? text2.split("\n").filter((line) => line.length > 0) : [];
|
|
66427
68506
|
const totalLines = lines.length;
|
|
66428
68507
|
const search = String(options.search ?? "").trim();
|
|
66429
68508
|
const matched = search ? lines.filter((line) => line.toLowerCase().includes(search.toLowerCase())) : lines;
|
|
@@ -66491,9 +68570,9 @@ async function read(ctx, params) {
|
|
|
66491
68570
|
const record = ctx.registry.requireSurface(params.tab);
|
|
66492
68571
|
const selector = stringParam(params, "selector") || "body";
|
|
66493
68572
|
const code = `(${READ_FUNCTION})(${JSON.stringify(selector)})`;
|
|
66494
|
-
let
|
|
68573
|
+
let text2;
|
|
66495
68574
|
try {
|
|
66496
|
-
|
|
68575
|
+
text2 = await deadline(
|
|
66497
68576
|
record.view.webContents.executeJavaScriptInIsolatedWorld(
|
|
66498
68577
|
ISOLATED_WORLD_ID,
|
|
66499
68578
|
[{ code }]
|
|
@@ -66510,14 +68589,14 @@ async function read(ctx, params) {
|
|
|
66510
68589
|
}
|
|
66511
68590
|
throw error;
|
|
66512
68591
|
}
|
|
66513
|
-
if (
|
|
68592
|
+
if (text2 === null || text2 === void 0) {
|
|
66514
68593
|
throw new BridgeCommandError(
|
|
66515
68594
|
"element_not_found",
|
|
66516
68595
|
`selector ${selector} matched nothing`
|
|
66517
68596
|
);
|
|
66518
68597
|
}
|
|
66519
68598
|
ctx.registry.touch(record);
|
|
66520
|
-
return { text: String(
|
|
68599
|
+
return { text: String(text2), ...pageOf(record.view) };
|
|
66521
68600
|
}
|
|
66522
68601
|
async function snapshot(ctx, params) {
|
|
66523
68602
|
const record = ctx.registry.requireSurface(params.tab);
|
|
@@ -67241,8 +69320,8 @@ async function type(ctx, params) {
|
|
|
67241
69320
|
const contents = record.view.webContents;
|
|
67242
69321
|
const target2 = targetOf(params);
|
|
67243
69322
|
const node = await resolveNode(ctx, record, target2);
|
|
67244
|
-
const
|
|
67245
|
-
const typed = await typeInto(ctx, contents, node,
|
|
69323
|
+
const text2 = typeof params.text === "string" ? params.text : "";
|
|
69324
|
+
const typed = await typeInto(ctx, contents, node, text2, target2);
|
|
67246
69325
|
if (typed) {
|
|
67247
69326
|
ctx.registry.touch(record);
|
|
67248
69327
|
return {
|
|
@@ -67262,7 +69341,7 @@ async function type(ctx, params) {
|
|
|
67262
69341
|
sessionId: frame.sessionId,
|
|
67263
69342
|
frame
|
|
67264
69343
|
};
|
|
67265
|
-
const typedInFrame = await typeInto(ctx, contents, inner,
|
|
69344
|
+
const typedInFrame = await typeInto(ctx, contents, inner, text2, target2);
|
|
67266
69345
|
if (typedInFrame) {
|
|
67267
69346
|
ctx.registry.touch(record);
|
|
67268
69347
|
return {
|
|
@@ -67281,9 +69360,9 @@ const NON_ALPHANUMERIC = /[^\p{L}\p{N}]+/gu;
|
|
|
67281
69360
|
function foldForComparison(value) {
|
|
67282
69361
|
return value.normalize("NFKC").toLowerCase().replace(NON_ALPHANUMERIC, "");
|
|
67283
69362
|
}
|
|
67284
|
-
function holdsTypedText(readBack2,
|
|
67285
|
-
const folded = foldForComparison(
|
|
67286
|
-
if (folded === "") return readBack2.includes(
|
|
69363
|
+
function holdsTypedText(readBack2, text2) {
|
|
69364
|
+
const folded = foldForComparison(text2);
|
|
69365
|
+
if (folded === "") return readBack2.includes(text2);
|
|
67287
69366
|
return foldForComparison(readBack2).includes(folded);
|
|
67288
69367
|
}
|
|
67289
69368
|
const SETTLE_BEFORE_REREAD_MS = 100;
|
|
@@ -67292,7 +69371,7 @@ function quoteReadBack(value) {
|
|
|
67292
69371
|
if (value.length <= MAX_QUOTED_READBACK) return `'${value}'`;
|
|
67293
69372
|
return `'${value.slice(0, MAX_QUOTED_READBACK)}…' (${value.length} chars)`;
|
|
67294
69373
|
}
|
|
67295
|
-
async function typeInto(ctx, contents, node,
|
|
69374
|
+
async function typeInto(ctx, contents, node, text2, target2) {
|
|
67296
69375
|
const focus = await sendIn(
|
|
67297
69376
|
ctx,
|
|
67298
69377
|
contents,
|
|
@@ -67311,9 +69390,9 @@ async function typeInto(ctx, contents, node, text, target2) {
|
|
|
67311
69390
|
"the editable target could not retain focus, so nothing was typed"
|
|
67312
69391
|
);
|
|
67313
69392
|
}
|
|
67314
|
-
await sendIn(ctx, contents, node.sessionId, "Input.insertText", { text });
|
|
69393
|
+
await sendIn(ctx, contents, node.sessionId, "Input.insertText", { text: text2 });
|
|
67315
69394
|
const readBack2 = await conversationReadBack(ctx, node, contents);
|
|
67316
|
-
if (holdsTypedText(readBack2,
|
|
69395
|
+
if (holdsTypedText(readBack2, text2)) {
|
|
67317
69396
|
return { value: readBack2, via: "insert_text" };
|
|
67318
69397
|
}
|
|
67319
69398
|
const set2 = await sendIn(
|
|
@@ -67324,7 +69403,7 @@ async function typeInto(ctx, contents, node, text, target2) {
|
|
|
67324
69403
|
{
|
|
67325
69404
|
objectId: node.objectId,
|
|
67326
69405
|
functionDeclaration: SET_VALUE_FUNCTION,
|
|
67327
|
-
arguments: [{ value:
|
|
69406
|
+
arguments: [{ value: text2 }],
|
|
67328
69407
|
returnByValue: true
|
|
67329
69408
|
}
|
|
67330
69409
|
);
|
|
@@ -67332,7 +69411,7 @@ async function typeInto(ctx, contents, node, text, target2) {
|
|
|
67332
69411
|
if (setValue === null) return null;
|
|
67333
69412
|
await sleep(SETTLE_BEFORE_REREAD_MS);
|
|
67334
69413
|
const settled = await conversationReadBack(ctx, node, contents);
|
|
67335
|
-
if (holdsTypedText(settled,
|
|
69414
|
+
if (holdsTypedText(settled, text2)) {
|
|
67336
69415
|
return {
|
|
67337
69416
|
value: settled,
|
|
67338
69417
|
via: "value_setter",
|
|
@@ -68376,12 +70455,12 @@ const WINDOWS_RESERVED_STEMS = /* @__PURE__ */ new Set([
|
|
|
68376
70455
|
"lpt8",
|
|
68377
70456
|
"lpt9"
|
|
68378
70457
|
]);
|
|
68379
|
-
function bytesOf(
|
|
68380
|
-
return new TextEncoder().encode(
|
|
70458
|
+
function bytesOf(text2) {
|
|
70459
|
+
return new TextEncoder().encode(text2).length;
|
|
68381
70460
|
}
|
|
68382
|
-
function fallbackDigest(
|
|
70461
|
+
function fallbackDigest(text2) {
|
|
68383
70462
|
let hash = 2166136261;
|
|
68384
|
-
for (const byte of new TextEncoder().encode(
|
|
70463
|
+
for (const byte of new TextEncoder().encode(text2)) {
|
|
68385
70464
|
hash = Math.imul(hash ^ byte, 16777619) >>> 0;
|
|
68386
70465
|
}
|
|
68387
70466
|
return hash.toString(16).padStart(8, "0");
|
|
@@ -69510,6 +71589,8 @@ class BrowserHost {
|
|
|
69510
71589
|
facts;
|
|
69511
71590
|
/** The session's per-origin storage clear, injected (see `BrowserHostOptions`). */
|
|
69512
71591
|
forgetSiteData;
|
|
71592
|
+
/** S6b's native card, when the launch built one (see `BrowserHostOptions`). */
|
|
71593
|
+
approvalsCard;
|
|
69513
71594
|
/** S4b's popout health, read from the controller (or the launch's platform
|
|
69514
71595
|
* answer when no controller exists). The strip reads this from the same
|
|
69515
71596
|
* projection as the tabs, so the renderer has one source for "child or
|
|
@@ -69547,6 +71628,7 @@ class BrowserHost {
|
|
|
69547
71628
|
this.tabAudio = new TabAudioTracker(() => this.onChanged());
|
|
69548
71629
|
this.facts = options.facts;
|
|
69549
71630
|
this.forgetSiteData = options.forgetSiteData;
|
|
71631
|
+
this.approvalsCard = options.approvalsCard;
|
|
69550
71632
|
this.addressOverlayMode = options.addressOverlayMode ?? (() => ({ mode: "suspend", reason: "unavailable" }));
|
|
69551
71633
|
this.historyStore = options.historyFilePath ? createBrowserHistoryStore(options.historyFilePath) : null;
|
|
69552
71634
|
}
|
|
@@ -69832,6 +71914,10 @@ class BrowserHost {
|
|
|
69832
71914
|
);
|
|
69833
71915
|
return {
|
|
69834
71916
|
addressOverlay: this.addressOverlayMode(),
|
|
71917
|
+
approvalsCard: this.approvalsCard?.state() ?? {
|
|
71918
|
+
available: false,
|
|
71919
|
+
open: false
|
|
71920
|
+
},
|
|
69835
71921
|
pageControls: this.pageControls.state(active),
|
|
69836
71922
|
tabs: this.chromeTabOrder.project(this.registry.snapshot()).map((entry, displayOrder) => ({
|
|
69837
71923
|
...this.chromeTabOrder.hasCustomOrder ? { displayOrder } : {},
|
|
@@ -70648,6 +72734,42 @@ class BrowserHost {
|
|
|
70648
72734
|
this.onChanged();
|
|
70649
72735
|
return { ...result, ...this.chromeState() };
|
|
70650
72736
|
}
|
|
72737
|
+
/**
|
|
72738
|
+
* Open the native approvals card from the shield (S6b).
|
|
72739
|
+
*
|
|
72740
|
+
* The renderer passes the locale and direction it resolved: main has no
|
|
72741
|
+
* catalogue, and the card is a second document whose `lang`/`dir` must follow
|
|
72742
|
+
* the app rather than the device tag (UX U2). The theme is the evidence
|
|
72743
|
+
* palette today; S6b's product path keeps the dark default it was reviewed in.
|
|
72744
|
+
*/
|
|
72745
|
+
openApprovalsCard(input) {
|
|
72746
|
+
const request = input && typeof input === "object" ? input : {};
|
|
72747
|
+
const locale = typeof request.locale === "string" ? request.locale : void 0;
|
|
72748
|
+
const dir = request.dir === "rtl" || request.dir === "ltr" ? request.dir : void 0;
|
|
72749
|
+
const theme = request.theme === "light" || request.theme === "dark" ? request.theme : void 0;
|
|
72750
|
+
const palette = request.palette === null ? null : typeof request.palette === "string" ? request.palette : void 0;
|
|
72751
|
+
this.approvalsCard?.open({ locale, dir, theme, palette });
|
|
72752
|
+
this.onChanged();
|
|
72753
|
+
return { ...this.chromeState() };
|
|
72754
|
+
}
|
|
72755
|
+
/** Close the native card without deciding (shield's second click / Escape). */
|
|
72756
|
+
closeApprovalsCard() {
|
|
72757
|
+
this.approvalsCard?.close();
|
|
72758
|
+
this.onChanged();
|
|
72759
|
+
return { ...this.chromeState() };
|
|
72760
|
+
}
|
|
72761
|
+
/** The renderer's resolved locale/theme, pushed on mount and on change (U5). */
|
|
72762
|
+
setApprovalsCardContext(input) {
|
|
72763
|
+
const request = input && typeof input === "object" ? input : {};
|
|
72764
|
+
const labels = request.requesterLabels && typeof request.requesterLabels === "object" && !Array.isArray(request.requesterLabels) ? request.requesterLabels : void 0;
|
|
72765
|
+
this.approvalsCard?.setContext({
|
|
72766
|
+
locale: typeof request.locale === "string" ? request.locale : void 0,
|
|
72767
|
+
dir: request.dir === "rtl" || request.dir === "ltr" ? request.dir : void 0,
|
|
72768
|
+
theme: request.theme === "light" || request.theme === "dark" ? request.theme : void 0,
|
|
72769
|
+
...request.palette === null ? { palette: null } : typeof request.palette === "string" ? { palette: request.palette } : {},
|
|
72770
|
+
...labels ? { requesterLabels: labels } : {}
|
|
72771
|
+
});
|
|
72772
|
+
}
|
|
70651
72773
|
/** Revoke one origin's approvals (design 9.4). Separate from closing a tab and
|
|
70652
72774
|
* separate from clearing cookies: "stop this agent" and "forget this site" are
|
|
70653
72775
|
* different intentions. */
|
|
@@ -71597,6 +73719,9 @@ const BROWSER_IPC_CHANNELS = [
|
|
|
71597
73719
|
"browser-page-control",
|
|
71598
73720
|
"browser-reopen-tab",
|
|
71599
73721
|
"browser-focus-page",
|
|
73722
|
+
"browser-approvals-card-open",
|
|
73723
|
+
"browser-approvals-card-close",
|
|
73724
|
+
"browser-approvals-card-context",
|
|
71600
73725
|
"browser-new-tab",
|
|
71601
73726
|
"browser-reorder-tabs",
|
|
71602
73727
|
"browser-tab-action",
|
|
@@ -71755,6 +73880,18 @@ function registerBrowserIpc(options) {
|
|
|
71755
73880
|
"browser-reopen-tab",
|
|
71756
73881
|
(event, sessionId2) => authorize(event).reopenClosed(optionalConversationOrThrow(sessionId2))
|
|
71757
73882
|
);
|
|
73883
|
+
electron.ipcMain.handle("browser-approvals-card-open", (event, input) => {
|
|
73884
|
+
const host = authorize(event);
|
|
73885
|
+
return host.openApprovalsCard(input);
|
|
73886
|
+
});
|
|
73887
|
+
electron.ipcMain.handle("browser-approvals-card-close", (event) => {
|
|
73888
|
+
const host = authorize(event);
|
|
73889
|
+
return host.closeApprovalsCard();
|
|
73890
|
+
});
|
|
73891
|
+
electron.ipcMain.handle("browser-approvals-card-context", (event, input) => {
|
|
73892
|
+
const host = authorize(event);
|
|
73893
|
+
host.setApprovalsCardContext(input);
|
|
73894
|
+
});
|
|
71758
73895
|
electron.ipcMain.handle("browser-focus-page", (event) => {
|
|
71759
73896
|
authorize(event);
|
|
71760
73897
|
options.focusPage?.();
|
|
@@ -74412,11 +76549,31 @@ async function initializeBrowserHost(options, bindings) {
|
|
|
74412
76549
|
type: metric.type
|
|
74413
76550
|
}))
|
|
74414
76551
|
}) : null;
|
|
76552
|
+
let respondToConsent = null;
|
|
74415
76553
|
const approvalsOverlay = options.approvalsOverlay?.enabled === true && approvalsOverlayEnabled(process.env) ? new ApprovalsOverlayController({
|
|
74416
76554
|
window: options.window,
|
|
74417
76555
|
documentUrl: options.approvalsOverlay.documentUrl,
|
|
76556
|
+
preloadPath: options.approvalsOverlay.preloadPath,
|
|
74418
76557
|
opaque: process.platform !== "darwin",
|
|
74419
|
-
|
|
76558
|
+
// The projection is the renderer's only view of the shield; a
|
|
76559
|
+
// dismissal from the card itself must push it (F1).
|
|
76560
|
+
onChanged: () => notifyChanged(),
|
|
76561
|
+
log: log2,
|
|
76562
|
+
respond: (entryId, decision) => {
|
|
76563
|
+
if (!respondToConsent) {
|
|
76564
|
+
throw new Error("browser_unavailable");
|
|
76565
|
+
}
|
|
76566
|
+
return respondToConsent(entryId, decision);
|
|
76567
|
+
},
|
|
76568
|
+
// The registry narrows its page handle to the fields the action
|
|
76569
|
+
// context uses; the underlying object is an Electron WebContents,
|
|
76570
|
+
// whose `focus()` is what the gated helper needs.
|
|
76571
|
+
pageWebContents: () => registry.activeTab?.view.webContents ?? null,
|
|
76572
|
+
focusTarget: (target2) => focusBrowserChordTarget(
|
|
76573
|
+
options.window,
|
|
76574
|
+
target2,
|
|
76575
|
+
options.windowShow
|
|
76576
|
+
)
|
|
74420
76577
|
}) : null;
|
|
74421
76578
|
const sessionStore = new BrowserSessionStore({
|
|
74422
76579
|
dir: path$1.join(options.userDataDir, "browser"),
|
|
@@ -74530,8 +76687,11 @@ async function initializeBrowserHost(options, bindings) {
|
|
|
74530
76687
|
clearTimeout(approvalsExpiryTimer);
|
|
74531
76688
|
approvalsExpiryTimer = null;
|
|
74532
76689
|
}
|
|
74533
|
-
const entries = approvals.pendingEntries()
|
|
74534
|
-
|
|
76690
|
+
const entries = approvals.pendingEntries().map((entry) => ({
|
|
76691
|
+
...entry,
|
|
76692
|
+
requesterSessionId: sessionRequesterOf(entry.requester)
|
|
76693
|
+
}));
|
|
76694
|
+
approvalsOverlay?.setModel({ entries });
|
|
74535
76695
|
if (entries.length === 0) return;
|
|
74536
76696
|
const delay2 = approvalsExpiryDelay(entries);
|
|
74537
76697
|
if (delay2 !== null) {
|
|
@@ -74563,8 +76723,15 @@ async function initializeBrowserHost(options, bindings) {
|
|
|
74563
76723
|
addressOverlayMode: () => addressOverlay ? addressOverlay.mode() : {
|
|
74564
76724
|
mode: "suspend",
|
|
74565
76725
|
reason: options.addressOverlay?.product === true ? "unavailable" : "platform"
|
|
74566
|
-
}
|
|
76726
|
+
},
|
|
76727
|
+
approvalsCard: approvalsOverlay ? {
|
|
76728
|
+
open: (input) => approvalsOverlay.open({ focus: true, ...input }),
|
|
76729
|
+
close: () => approvalsOverlay.close("shield"),
|
|
76730
|
+
setContext: (context) => approvalsOverlay.setContext(context),
|
|
76731
|
+
state: () => approvalsOverlay.state()
|
|
76732
|
+
} : void 0
|
|
74567
76733
|
});
|
|
76734
|
+
respondToConsent = (entryId, decision) => host.respondToConsent(entryId, decision);
|
|
74568
76735
|
historyClearer.current = {
|
|
74569
76736
|
clear: () => host.clearHistory(),
|
|
74570
76737
|
clearOrigin: (origin) => host.clearOriginHistory(origin)
|
|
@@ -77857,11 +80024,11 @@ function runInOwnProcessGroup(input) {
|
|
|
77857
80024
|
groupPid = child.pid ?? null;
|
|
77858
80025
|
if (groupPid !== null) input.onSpawn?.(groupPid);
|
|
77859
80026
|
const record = (chunk, stream) => {
|
|
77860
|
-
const
|
|
80027
|
+
const text2 = String(chunk);
|
|
77861
80028
|
if (stream === "stdout") {
|
|
77862
|
-
stdout = (stdout +
|
|
80029
|
+
stdout = (stdout + text2).slice(-4194304);
|
|
77863
80030
|
} else {
|
|
77864
|
-
stderr = (stderr +
|
|
80031
|
+
stderr = (stderr + text2).slice(-4194304);
|
|
77865
80032
|
}
|
|
77866
80033
|
};
|
|
77867
80034
|
child.stdout?.on("data", (chunk) => record(chunk, "stdout"));
|
|
@@ -77993,13 +80160,13 @@ function summariseReleaseBody(body, limit = SUMMARY_LIMIT) {
|
|
|
77993
80160
|
if (typeof body !== "string") return null;
|
|
77994
80161
|
const blocks = body.replace(CRLF, "\n").split(BLANK_LINE);
|
|
77995
80162
|
for (const block of blocks) {
|
|
77996
|
-
const
|
|
77997
|
-
if (
|
|
80163
|
+
const text2 = flattenBlock(block);
|
|
80164
|
+
if (text2 && !isMachineRow(text2)) return truncateSummary(text2, limit);
|
|
77998
80165
|
}
|
|
77999
80166
|
return null;
|
|
78000
80167
|
}
|
|
78001
|
-
function isMachineRow(
|
|
78002
|
-
return PR_HEADLINE.test(
|
|
80168
|
+
function isMachineRow(text2) {
|
|
80169
|
+
return PR_HEADLINE.test(text2) || MERGE_CITATION.test(text2);
|
|
78003
80170
|
}
|
|
78004
80171
|
const CRLF = /\r\n?/g;
|
|
78005
80172
|
const BLANK_LINE = /\n{2,}/;
|
|
@@ -78030,9 +80197,9 @@ function flattenBlock(block) {
|
|
|
78030
80197
|
if (lines.length === 0) return "";
|
|
78031
80198
|
return collapseWhitespace(flattenInline(lines.join(" ")));
|
|
78032
80199
|
}
|
|
78033
|
-
function flattenInline(
|
|
80200
|
+
function flattenInline(text2) {
|
|
78034
80201
|
const code = [];
|
|
78035
|
-
const masked =
|
|
80202
|
+
const masked = text2.replace(MASK_ALPHABET, " ").replace(IMAGE, "$1").replace(LINK, "$1").replace(CODE_SPAN, (_span, inner) => {
|
|
78036
80203
|
code.push(inner);
|
|
78037
80204
|
return `${code.length - 1}`;
|
|
78038
80205
|
});
|
|
@@ -78044,12 +80211,12 @@ function flattenInline(text) {
|
|
|
78044
80211
|
function unwrapEmphasis(_match, triple, strong, italic) {
|
|
78045
80212
|
return triple ?? strong ?? italic ?? "";
|
|
78046
80213
|
}
|
|
78047
|
-
function collapseWhitespace(
|
|
78048
|
-
return
|
|
80214
|
+
function collapseWhitespace(text2) {
|
|
80215
|
+
return text2.replace(WHITESPACE_RUN, " ").trim();
|
|
78049
80216
|
}
|
|
78050
|
-
function truncateSummary(
|
|
78051
|
-
if (
|
|
78052
|
-
const cut =
|
|
80217
|
+
function truncateSummary(text2, limit) {
|
|
80218
|
+
if (text2.length <= limit) return text2;
|
|
80219
|
+
const cut = text2.slice(0, Math.max(0, limit - 3));
|
|
78053
80220
|
const lastSpace = cut.lastIndexOf(" ");
|
|
78054
80221
|
const words = lastSpace > limit / 2 ? cut.slice(0, lastSpace) : cut;
|
|
78055
80222
|
const trimmed = words.trimEnd();
|
|
@@ -78060,16 +80227,16 @@ function truncateSummary(text, limit) {
|
|
|
78060
80227
|
}
|
|
78061
80228
|
const DanglingWord = /(?:^|\s)(?:a|an|as|at|by|in|of|on|or|to)$/i;
|
|
78062
80229
|
const TRAILING_STOP = /[.!?]$/;
|
|
78063
|
-
function stripUnpairedEmphasis(
|
|
78064
|
-
const leading =
|
|
78065
|
-
if (leading && !
|
|
78066
|
-
return
|
|
80230
|
+
function stripUnpairedEmphasis(text2) {
|
|
80231
|
+
const leading = text2.match(/^\*{1,3}/);
|
|
80232
|
+
if (leading && !text2.slice(leading[0].length).includes("*")) {
|
|
80233
|
+
return text2.slice(leading[0].length).trimStart();
|
|
78067
80234
|
}
|
|
78068
|
-
const trailing =
|
|
78069
|
-
if (trailing && !
|
|
78070
|
-
return
|
|
80235
|
+
const trailing = text2.match(/\*{1,3}$/);
|
|
80236
|
+
if (trailing && !text2.slice(0, -trailing[0].length).includes("*")) {
|
|
80237
|
+
return text2.slice(0, -trailing[0].length).trimEnd();
|
|
78071
80238
|
}
|
|
78072
|
-
return
|
|
80239
|
+
return text2;
|
|
78073
80240
|
}
|
|
78074
80241
|
function parseReleaseResponse(payload, version) {
|
|
78075
80242
|
if (!payload || typeof payload !== "object" || Array.isArray(payload)) {
|
|
@@ -87532,7 +89699,11 @@ electron.app.whenReady().then(async () => {
|
|
|
87532
89699
|
...approvalsOverlayS6a && approvalsOverlayDocumentUrl ? {
|
|
87533
89700
|
approvalsOverlay: {
|
|
87534
89701
|
enabled: true,
|
|
87535
|
-
documentUrl: approvalsOverlayDocumentUrl
|
|
89702
|
+
documentUrl: approvalsOverlayDocumentUrl,
|
|
89703
|
+
preloadPath: path$1.join(
|
|
89704
|
+
__dirname,
|
|
89705
|
+
"../preload/browser-approvals-overlay.js"
|
|
89706
|
+
)
|
|
87536
89707
|
}
|
|
87537
89708
|
} : {},
|
|
87538
89709
|
preloadPath: path$1.join(__dirname, "../preload/index.js"),
|