local-operator-ui 0.42.3 → 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 +2240 -140
- package/out/preload/browser-approvals-overlay.js +15 -0
- package/out/preload/index.js +6 -0
- package/out/renderer/assets/{_basePickBy-C-uJ_4_H.js → _basePickBy-CvLnUv7q.js} +1 -1
- package/out/renderer/assets/{_baseUniq-DsbREs0d.js → _baseUniq-BKrt6A4N.js} +1 -1
- package/out/renderer/assets/{agent-details-page-DqircW79.js → agent-details-page-BWSojjKJ.js} +2 -2
- package/out/renderer/assets/{agent-hub-page-DW0ykyen.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-BQFx264l.js → arc-Bo9HqcA4.js} +1 -1
- package/out/renderer/assets/{architectureDiagram-IEHRJDOE-CwEdIQqF.js → architectureDiagram-IEHRJDOE-CjpgkGSs.js} +1 -1
- package/out/renderer/assets/{blockDiagram-JOT3LUYC-D2fu5TLW.js → blockDiagram-JOT3LUYC-CkF9oOcr.js} +1 -1
- package/out/renderer/assets/{book-open-CXRG7kmQ.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-BG_diNFj.js → browser-webauthn-prompt-D90b-ibP.js} +1 -1
- package/out/renderer/assets/{building-2-BSZ0T67J.js → building-2-CTbbzJRN.js} +1 -1
- package/out/renderer/assets/{c4Diagram-VJAJSXHY-B4F6kAAa.js → c4Diagram-VJAJSXHY-Br-J2zii.js} +1 -1
- package/out/renderer/assets/channel-bs4gvJO_.js +1 -0
- package/out/renderer/assets/{chunk-4BMEZGHF-Gvas_grr.js → chunk-4BMEZGHF-Cch4oIqI.js} +1 -1
- package/out/renderer/assets/{chunk-A2AXSNBT-W3cPWgPw.js → chunk-A2AXSNBT-BpTLsrEt.js} +1 -1
- package/out/renderer/assets/{chunk-AEK57VVT-DzoSrMRs.js → chunk-AEK57VVT-BA_p-1wW.js} +1 -1
- package/out/renderer/assets/{chunk-D6G4REZN-BkZWDlS1.js → chunk-D6G4REZN-C85KCEHq.js} +1 -1
- package/out/renderer/assets/{chunk-RZ5BOZE2-gmzFxQwc.js → chunk-RZ5BOZE2-Y0y4RocF.js} +1 -1
- package/out/renderer/assets/{chunk-XZIHB7SX-BrbU5SuY.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-EdmGKGTJ.js → console-mirror-BiiClM8r.js} +1 -1
- package/out/renderer/assets/{consoleCapture-DxGNu1ME.js → consoleCapture-OAXBv_kp.js} +1 -1
- package/out/renderer/assets/{conversation-input-sync-DwcHJyBH.js → conversation-input-sync-BXv32NfB.js} +239 -239
- package/out/renderer/assets/{dagre-OKDRZEBW-DYuthQOj.js → dagre-OKDRZEBW-C9TMqwJP.js} +1 -1
- package/out/renderer/assets/{diagram-SSKATNLV-BloU54ZK.js → diagram-SSKATNLV-SI8XWzeq.js} +1 -1
- package/out/renderer/assets/{diagram-VNBRO52H-BGuheJEu.js → diagram-VNBRO52H-DnvHZL8L.js} +1 -1
- package/out/renderer/assets/{erDiagram-Q7BY3M3F-COWp-n7n.js → erDiagram-Q7BY3M3F-nWqxZ0l9.js} +1 -1
- package/out/renderer/assets/error-boundary-CqZRoe9S.js +126 -0
- package/out/renderer/assets/{flowDiagram-4HSFHLVR-D3etxTbr.js → flowDiagram-4HSFHLVR-DKJUboz2.js} +1 -1
- package/out/renderer/assets/{ganttDiagram-APWFNJXF-C85T-bBk.js → ganttDiagram-APWFNJXF-D0s8LZxz.js} +1 -1
- package/out/renderer/assets/{gitGraphDiagram-7IBYFJ6S-DR8rSdMP.js → gitGraphDiagram-7IBYFJ6S-DOu6eUhN.js} +1 -1
- package/out/renderer/assets/{graph-9RwMEpzp.js → graph-D4HJHitc.js} +1 -1
- package/out/renderer/assets/{hash-DyArWvVk.js → hash-CzjTtP10.js} +1 -1
- package/out/renderer/assets/{heart-wR8xxfkl.js → heart-B3mi-jou.js} +1 -1
- package/out/renderer/assets/{index-C-q9Saz2.js → index-CmbVW2m7.js} +1 -1
- package/out/renderer/assets/{index-B6JvVM0y.js → index-D8glNEcT.js} +1 -1
- package/out/renderer/assets/index-UXcKfWo6.css +1 -0
- package/out/renderer/assets/{index-XnmeTeQi.js → index-wz2cjW5P.js} +193 -193
- package/out/renderer/assets/infoDiagram-PH2N3AL5-DzTCSaMw.js +2 -0
- package/out/renderer/assets/{installer-DLt9j6P5.js → installer-DmYDl1Bg.js} +1 -1
- package/out/renderer/assets/{journeyDiagram-U35MCT3I-Bi5S21jG.js → journeyDiagram-U35MCT3I-BXdBmrLL.js} +1 -1
- package/out/renderer/assets/{kanban-definition-NDS4AKOZ-3yXRNVxM.js → kanban-definition-NDS4AKOZ-B-oT4qjy.js} +1 -1
- package/out/renderer/assets/{layout-V9S6bEAP.js → layout-C35xWGut.js} +1 -1
- package/out/renderer/assets/{legacy-agents-page-DlXcMI3d.js → legacy-agents-page-zQ2FJ-pr.js} +8 -8
- package/out/renderer/assets/library-page-CB9dDvmn.js +157 -0
- package/out/renderer/assets/{mermaid.core-1ZZxL94e.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-BqNXJ5iP.js → mindmap-definition-ALO5MXBD-B-cLhV3I.js} +1 -1
- package/out/renderer/assets/{mini-BpZoZmwc.js → mini-BH-IxQ6K.js} +1 -1
- package/out/renderer/assets/{notebook-pen-BRGyo6qe.js → notebook-pen-FphG2dMG.js} +1 -1
- package/out/renderer/assets/{org-access-DL4sfC5o.js → org-access-DVt3GFMX.js} +1 -1
- package/out/renderer/assets/{org-surface-gate-DzVZOCgc.js → org-surface-gate-tHnRzD9A.js} +1 -1
- package/out/renderer/assets/{page-header-CsJwSRXG.js → page-header-B3bOo0UX.js} +1 -1
- package/out/renderer/assets/{path-utils-Bslmu3x5.js → path-utils-BkJr3--b.js} +1 -1
- package/out/renderer/assets/{pieDiagram-IB7DONF6-FSpbUZa3.js → pieDiagram-IB7DONF6-CrHoOvO2.js} +1 -1
- package/out/renderer/assets/projects-page-ACh1mgoo.js +45 -0
- package/out/renderer/assets/{publication-validation-C5mxv51G.js → publication-validation-D2z_zWQT.js} +1 -1
- package/out/renderer/assets/{quadrantDiagram-7GDLP6J5-Dl1CxU0W.js → quadrantDiagram-7GDLP6J5-DYDa1ECN.js} +1 -1
- package/out/renderer/assets/{radar-MK3ICKWK-BSuQo5KN.js → radar-MK3ICKWK-vDf2Es_C.js} +1 -1
- package/out/renderer/assets/{radient-auth-buttons-BZe_OZtZ.js → radient-auth-buttons-Di1zLV23.js} +1 -1
- package/out/renderer/assets/{requirementDiagram-KVF5MWMF-t8Dz-7Kp.js → requirementDiagram-KVF5MWMF-ChyAHYwK.js} +1 -1
- package/out/renderer/assets/{sankeyDiagram-QLVOVGJD-q0DLuZVj.js → sankeyDiagram-QLVOVGJD-D9wd8zQP.js} +1 -1
- package/out/renderer/assets/{schedules-page-6TSgJ8gq.js → schedules-page-BA4nO5Tw.js} +2 -2
- package/out/renderer/assets/{sequenceDiagram-X6HHIX6F-CXU3BFHj.js → sequenceDiagram-X6HHIX6F-CBIVQtEP.js} +1 -1
- package/out/renderer/assets/{settings-page-Cr3wqA95.js → settings-page-D5KhLQHE.js} +1 -1
- package/out/renderer/assets/{smartart-sc0B4J9V.js → smartart-58otsUWh.js} +1 -1
- package/out/renderer/assets/{stateDiagram-DGXRK772-BSXJAxkU.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-BJBU8NFV.js → timeline-definition-BDJGKUSR-DRQlSiWd.js} +1 -1
- package/out/renderer/assets/{use-download-agent-mutation-DSNRIoxY.js → use-download-agent-mutation-BAzM19BL.js} +1 -1
- package/out/renderer/assets/{use-session-snapshot-Cv3MIHrU.js → use-session-snapshot-0k6Oot8j.js} +1 -1
- package/out/renderer/assets/{xychartDiagram-VJFVF3MP-CFJkfmsL.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 +2 -2
- package/out/renderer/assets/agents-page-DfghpQsj.js +0 -7
- package/out/renderer/assets/approvalsOverlay-Bb-_GvbK.js +0 -1
- package/out/renderer/assets/browser-page-BbCJ4Kqg.js +0 -1
- package/out/renderer/assets/channel-DlvTVSBZ.js +0 -1
- package/out/renderer/assets/classDiagram-GIVACNV2-D6tpardR.js +0 -1
- package/out/renderer/assets/classDiagram-v2-COTLJTTW-D6tpardR.js +0 -1
- package/out/renderer/assets/clone-DAFDyYLt.js +0 -1
- package/out/renderer/assets/error-boundary-DRSRl09t.js +0 -126
- package/out/renderer/assets/index-DH2Wdo12.css +0 -1
- package/out/renderer/assets/infoDiagram-PH2N3AL5-B0dF0UUr.js +0 -2
- package/out/renderer/assets/library-page-Z2ycLLgX.js +0 -157
- package/out/renderer/assets/mesh-page-VN5YlOig.js +0 -1
- package/out/renderer/assets/messages-UU62OcMx.js +0 -3
- package/out/renderer/assets/projects-page-CyfiN3pO.js +0 -45
- package/out/renderer/assets/stateDiagram-v2-YXO3MK2T-TeEHL_JN.js +0 -1
- package/out/renderer/assets/team-bridge-page-1N2Nu5OI.js +0 -16
- /package/out/renderer/assets/{index-C4JJ-uY-.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"])
|
|
@@ -6236,15 +6236,15 @@ function readServeRecords(dir) {
|
|
|
6236
6236
|
for (const name of names.sort()) {
|
|
6237
6237
|
if (!name.endsWith(".json")) continue;
|
|
6238
6238
|
const file = path$1.join(dir, name);
|
|
6239
|
-
let
|
|
6239
|
+
let text2;
|
|
6240
6240
|
try {
|
|
6241
|
-
|
|
6241
|
+
text2 = fs.readFileSync(file, "utf8");
|
|
6242
6242
|
} catch {
|
|
6243
6243
|
files.push({ file, record: null, problem: "unreadable" });
|
|
6244
6244
|
continue;
|
|
6245
6245
|
}
|
|
6246
6246
|
try {
|
|
6247
|
-
files.push(parseRecord(JSON.parse(
|
|
6247
|
+
files.push(parseRecord(JSON.parse(text2), file));
|
|
6248
6248
|
} catch {
|
|
6249
6249
|
files.push({ file, record: null, problem: "unparseable" });
|
|
6250
6250
|
}
|
|
@@ -8530,8 +8530,8 @@ function didSourceRebuildLand(input) {
|
|
|
8530
8530
|
}
|
|
8531
8531
|
const GUARD_BYPASS_ADVICE = /--skip-[a-z-]+|--allow-downgrade|--force\b|--no-verify|--ignore-checks/i;
|
|
8532
8532
|
const TERMINAL_INSTRUCTION = /^(?!\S+:\s)(?:git|lop-update|uv|pip|pipx|python\d?|sudo)\b/i;
|
|
8533
|
-
function installDiagnosisLines(
|
|
8534
|
-
const lines =
|
|
8533
|
+
function installDiagnosisLines(text2, maxLines = 6) {
|
|
8534
|
+
const lines = text2.split("\n").map((line) => line.trim()).filter((line) => line.length > 0);
|
|
8535
8535
|
if (lines.length === 0) return "";
|
|
8536
8536
|
const allowed = lines.filter((line) => !GUARD_BYPASS_ADVICE.test(line));
|
|
8537
8537
|
if (allowed.length === 0) return "";
|
|
@@ -11769,8 +11769,8 @@ function runBounded(command, args, env, bounds) {
|
|
|
11769
11769
|
});
|
|
11770
11770
|
}
|
|
11771
11771
|
const NEWLINES = /\r?\n/;
|
|
11772
|
-
const errorTail = (
|
|
11773
|
-
const kept =
|
|
11772
|
+
const errorTail = (text2, lines = 3) => {
|
|
11773
|
+
const kept = text2.split(NEWLINES).map((line) => line.trim()).filter(Boolean);
|
|
11774
11774
|
if (kept.length === 0) return "";
|
|
11775
11775
|
const tail = kept.slice(-lines).join(" | ");
|
|
11776
11776
|
return kept.length > lines ? `… ${tail}` : tail;
|
|
@@ -18254,14 +18254,14 @@ function requireFoldFlowLines() {
|
|
|
18254
18254
|
const FOLD_FLOW = "flow";
|
|
18255
18255
|
const FOLD_BLOCK = "block";
|
|
18256
18256
|
const FOLD_QUOTED = "quoted";
|
|
18257
|
-
function foldFlowLines$1(
|
|
18257
|
+
function foldFlowLines$1(text2, indent, mode = "flow", { indentAtStart, lineWidth = 80, minContentWidth = 20, onFold, onOverflow } = {}) {
|
|
18258
18258
|
if (!lineWidth || lineWidth < 0)
|
|
18259
|
-
return
|
|
18259
|
+
return text2;
|
|
18260
18260
|
if (lineWidth < minContentWidth)
|
|
18261
18261
|
minContentWidth = 0;
|
|
18262
18262
|
const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length);
|
|
18263
|
-
if (
|
|
18264
|
-
return
|
|
18263
|
+
if (text2.length <= endStep)
|
|
18264
|
+
return text2;
|
|
18265
18265
|
const folds = [];
|
|
18266
18266
|
const escapedFolds = {};
|
|
18267
18267
|
let end = lineWidth - indent.length;
|
|
@@ -18278,14 +18278,14 @@ function requireFoldFlowLines() {
|
|
|
18278
18278
|
let escStart = -1;
|
|
18279
18279
|
let escEnd = -1;
|
|
18280
18280
|
if (mode === FOLD_BLOCK) {
|
|
18281
|
-
i = consumeMoreIndentedLines(
|
|
18281
|
+
i = consumeMoreIndentedLines(text2, i, indent.length);
|
|
18282
18282
|
if (i !== -1)
|
|
18283
18283
|
end = i + endStep;
|
|
18284
18284
|
}
|
|
18285
|
-
for (let ch; ch =
|
|
18285
|
+
for (let ch; ch = text2[i += 1]; ) {
|
|
18286
18286
|
if (mode === FOLD_QUOTED && ch === "\\") {
|
|
18287
18287
|
escStart = i;
|
|
18288
|
-
switch (
|
|
18288
|
+
switch (text2[i + 1]) {
|
|
18289
18289
|
case "x":
|
|
18290
18290
|
i += 3;
|
|
18291
18291
|
break;
|
|
@@ -18302,12 +18302,12 @@ function requireFoldFlowLines() {
|
|
|
18302
18302
|
}
|
|
18303
18303
|
if (ch === "\n") {
|
|
18304
18304
|
if (mode === FOLD_BLOCK)
|
|
18305
|
-
i = consumeMoreIndentedLines(
|
|
18305
|
+
i = consumeMoreIndentedLines(text2, i, indent.length);
|
|
18306
18306
|
end = i + indent.length + endStep;
|
|
18307
18307
|
split = void 0;
|
|
18308
18308
|
} else {
|
|
18309
18309
|
if (ch === " " && prev && prev !== " " && prev !== "\n" && prev !== " ") {
|
|
18310
|
-
const next =
|
|
18310
|
+
const next = text2[i + 1];
|
|
18311
18311
|
if (next && next !== " " && next !== "\n" && next !== " ")
|
|
18312
18312
|
split = i;
|
|
18313
18313
|
}
|
|
@@ -18319,12 +18319,12 @@ function requireFoldFlowLines() {
|
|
|
18319
18319
|
} else if (mode === FOLD_QUOTED) {
|
|
18320
18320
|
while (prev === " " || prev === " ") {
|
|
18321
18321
|
prev = ch;
|
|
18322
|
-
ch =
|
|
18322
|
+
ch = text2[i += 1];
|
|
18323
18323
|
overflow = true;
|
|
18324
18324
|
}
|
|
18325
18325
|
const j = i > escEnd + 1 ? i - 2 : escStart - 1;
|
|
18326
18326
|
if (escapedFolds[j])
|
|
18327
|
-
return
|
|
18327
|
+
return text2;
|
|
18328
18328
|
folds.push(j);
|
|
18329
18329
|
escapedFolds[j] = true;
|
|
18330
18330
|
end = j + endStep;
|
|
@@ -18339,39 +18339,39 @@ function requireFoldFlowLines() {
|
|
|
18339
18339
|
if (overflow && onOverflow)
|
|
18340
18340
|
onOverflow();
|
|
18341
18341
|
if (folds.length === 0)
|
|
18342
|
-
return
|
|
18342
|
+
return text2;
|
|
18343
18343
|
if (onFold)
|
|
18344
18344
|
onFold();
|
|
18345
|
-
let res =
|
|
18345
|
+
let res = text2.slice(0, folds[0]);
|
|
18346
18346
|
for (let i2 = 0; i2 < folds.length; ++i2) {
|
|
18347
18347
|
const fold = folds[i2];
|
|
18348
|
-
const end2 = folds[i2 + 1] ||
|
|
18348
|
+
const end2 = folds[i2 + 1] || text2.length;
|
|
18349
18349
|
if (fold === 0)
|
|
18350
18350
|
res = `
|
|
18351
|
-
${indent}${
|
|
18351
|
+
${indent}${text2.slice(0, end2)}`;
|
|
18352
18352
|
else {
|
|
18353
18353
|
if (mode === FOLD_QUOTED && escapedFolds[fold])
|
|
18354
|
-
res += `${
|
|
18354
|
+
res += `${text2[fold]}\\`;
|
|
18355
18355
|
res += `
|
|
18356
|
-
${indent}${
|
|
18356
|
+
${indent}${text2.slice(fold + 1, end2)}`;
|
|
18357
18357
|
}
|
|
18358
18358
|
}
|
|
18359
18359
|
return res;
|
|
18360
18360
|
}
|
|
18361
|
-
function consumeMoreIndentedLines(
|
|
18361
|
+
function consumeMoreIndentedLines(text2, i, indent) {
|
|
18362
18362
|
let end = i;
|
|
18363
18363
|
let start = i + 1;
|
|
18364
|
-
let ch =
|
|
18364
|
+
let ch = text2[start];
|
|
18365
18365
|
while (ch === " " || ch === " ") {
|
|
18366
18366
|
if (i < start + indent) {
|
|
18367
|
-
ch =
|
|
18367
|
+
ch = text2[++i];
|
|
18368
18368
|
} else {
|
|
18369
18369
|
do {
|
|
18370
|
-
ch =
|
|
18370
|
+
ch = text2[++i];
|
|
18371
18371
|
} while (ch && ch !== "\n");
|
|
18372
18372
|
end = i;
|
|
18373
18373
|
start = i + 1;
|
|
18374
|
-
ch =
|
|
18374
|
+
ch = text2[start];
|
|
18375
18375
|
}
|
|
18376
18376
|
}
|
|
18377
18377
|
return end;
|
|
@@ -24798,9 +24798,9 @@ function readConsolePolicy(env = process.env) {
|
|
|
24798
24798
|
}
|
|
24799
24799
|
function readQuickSendValue(env = process.env) {
|
|
24800
24800
|
const file = quickSendConfigPath(env);
|
|
24801
|
-
let
|
|
24801
|
+
let text2;
|
|
24802
24802
|
try {
|
|
24803
|
-
|
|
24803
|
+
text2 = fs.readFileSync(file, "utf8");
|
|
24804
24804
|
} catch (error) {
|
|
24805
24805
|
const code = error.code;
|
|
24806
24806
|
if (code === "ENOENT") {
|
|
@@ -24814,7 +24814,7 @@ function readQuickSendValue(env = process.env) {
|
|
|
24814
24814
|
}
|
|
24815
24815
|
let parsed;
|
|
24816
24816
|
try {
|
|
24817
|
-
parsed = distExports.parse(
|
|
24817
|
+
parsed = distExports.parse(text2);
|
|
24818
24818
|
} catch (error) {
|
|
24819
24819
|
return {
|
|
24820
24820
|
value: DEFAULT_QUICK_SEND_VALUE,
|
|
@@ -25614,7 +25614,7 @@ const CURSOR = /* @__PURE__ */ new Map([
|
|
|
25614
25614
|
["end", { normal: "\x1B[F", application: "\x1BOF" }]
|
|
25615
25615
|
]);
|
|
25616
25616
|
const ENCODER$1 = new TextEncoder();
|
|
25617
|
-
const encodeText = (
|
|
25617
|
+
const encodeText = (text2) => ENCODER$1.encode(text2);
|
|
25618
25618
|
function encodeNamedKey(name, modes) {
|
|
25619
25619
|
const fixed = FIXED.get(name);
|
|
25620
25620
|
if (fixed !== void 0) return encodeText(fixed);
|
|
@@ -25738,8 +25738,8 @@ class Osc133Scanner {
|
|
|
25738
25738
|
}
|
|
25739
25739
|
}
|
|
25740
25740
|
function parseBody(body, offset) {
|
|
25741
|
-
const
|
|
25742
|
-
const [kind, status2] =
|
|
25741
|
+
const text2 = String.fromCharCode(...body);
|
|
25742
|
+
const [kind, status2] = text2.split(";");
|
|
25743
25743
|
const mapped = KINDS[kind];
|
|
25744
25744
|
if (!mapped) return null;
|
|
25745
25745
|
if (status2 === void 0 || status2 === "") {
|
|
@@ -27750,9 +27750,9 @@ async function dispatchConsole(host, method, params) {
|
|
|
27750
27750
|
}
|
|
27751
27751
|
case "console_input": {
|
|
27752
27752
|
const surface = requiredSurface(params.surface);
|
|
27753
|
-
const
|
|
27753
|
+
const text2 = optionalString$1(params.text, "text");
|
|
27754
27754
|
const bytes = optionalBytes(params.bytes);
|
|
27755
|
-
if (
|
|
27755
|
+
if (text2 === void 0 && bytes === void 0) {
|
|
27756
27756
|
throw new ConsoleError(
|
|
27757
27757
|
"internal",
|
|
27758
27758
|
"console_input needs text or bytes; a secret_ref is resolved by the tool before the call",
|
|
@@ -27762,7 +27762,7 @@ async function dispatchConsole(host, method, params) {
|
|
|
27762
27762
|
return host.input(
|
|
27763
27763
|
surface,
|
|
27764
27764
|
{
|
|
27765
|
-
text,
|
|
27765
|
+
text: text2,
|
|
27766
27766
|
bytes,
|
|
27767
27767
|
paste: optionalBoolean$1(params.paste, "paste")
|
|
27768
27768
|
},
|
|
@@ -28298,12 +28298,12 @@ function registerConsoleIpc(options) {
|
|
|
28298
28298
|
});
|
|
28299
28299
|
electron.ipcMain.handle(
|
|
28300
28300
|
"console-input",
|
|
28301
|
-
async (event, surface,
|
|
28301
|
+
async (event, surface, text2) => {
|
|
28302
28302
|
const host = authorize(event);
|
|
28303
|
-
if (typeof
|
|
28303
|
+
if (typeof text2 !== "string") {
|
|
28304
28304
|
throw new Error("Console input must be a string.");
|
|
28305
28305
|
}
|
|
28306
|
-
return host.input(stringOrThrow(surface, "surface"), { text }, "user");
|
|
28306
|
+
return host.input(stringOrThrow(surface, "surface"), { text: text2 }, "user");
|
|
28307
28307
|
}
|
|
28308
28308
|
);
|
|
28309
28309
|
electron.ipcMain.handle(
|
|
@@ -29484,11 +29484,11 @@ function sanitizeRows(value) {
|
|
|
29484
29484
|
const rows = [];
|
|
29485
29485
|
for (const entry of value) {
|
|
29486
29486
|
if (!isRecord$1(entry) || !hasOnlyKeys(entry, ["text", "title"])) return null;
|
|
29487
|
-
const
|
|
29487
|
+
const text2 = sanitizeOverlayText(entry.text, ADDRESS_LIST_MAX_TEXT);
|
|
29488
29488
|
const title = sanitizeOverlayText(entry.title, ADDRESS_LIST_MAX_TITLE);
|
|
29489
|
-
if (
|
|
29490
|
-
if (
|
|
29491
|
-
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 });
|
|
29492
29492
|
}
|
|
29493
29493
|
return rows;
|
|
29494
29494
|
}
|
|
@@ -29609,12 +29609,12 @@ function sanitizeProjection(raw) {
|
|
|
29609
29609
|
if (!NOTICE_KINDS.includes(viewRaw.notice)) {
|
|
29610
29610
|
return { ok: false, reason: "bad_notice" };
|
|
29611
29611
|
}
|
|
29612
|
-
const
|
|
29613
|
-
if (
|
|
29612
|
+
const text2 = sanitizeOverlayText(viewRaw.text, ADDRESS_LIST_MAX_LABEL);
|
|
29613
|
+
if (text2 === null) return { ok: false, reason: "bad_notice_text" };
|
|
29614
29614
|
view = {
|
|
29615
29615
|
kind: "notice",
|
|
29616
29616
|
notice: viewRaw.notice,
|
|
29617
|
-
text
|
|
29617
|
+
text: text2
|
|
29618
29618
|
};
|
|
29619
29619
|
} else {
|
|
29620
29620
|
return { ok: false, reason: "bad_view" };
|
|
@@ -32125,6 +32125,25 @@ class ApprovalStore {
|
|
|
32125
32125
|
);
|
|
32126
32126
|
}
|
|
32127
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
|
+
};
|
|
32128
32147
|
const APPROVALS_CARD_MAX_WIDTH = 352;
|
|
32129
32148
|
const APPROVALS_CARD_MAX_HEIGHT = 480;
|
|
32130
32149
|
const APPROVALS_CARD_MIN_HEIGHT = 96;
|
|
@@ -32157,7 +32176,7 @@ function approvalsCardBoundsFor(input) {
|
|
|
32157
32176
|
);
|
|
32158
32177
|
const viewWidth = width + 2 * pad;
|
|
32159
32178
|
const viewHeight = height + 2 * pad;
|
|
32160
|
-
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);
|
|
32161
32180
|
const viewY = integer(content.y + content.height - inset - height - pad);
|
|
32162
32181
|
const view = {
|
|
32163
32182
|
x: viewX,
|
|
@@ -32181,6 +32200,153 @@ function approvalsCardBoundsFor(input) {
|
|
|
32181
32200
|
pad
|
|
32182
32201
|
};
|
|
32183
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
|
+
}
|
|
32184
32350
|
const APPROVALS_OVERLAY_S6A_ENV = "LOCAL_OPERATOR_UI_BROWSER_APPROVALS_OVERLAY_S6A";
|
|
32185
32351
|
const TRANSPARENT = "#00000000";
|
|
32186
32352
|
const OPAQUE = "#1b1f24";
|
|
@@ -32208,11 +32374,35 @@ function approvalsDocumentUrl(documentUrl, count, theme, opaque) {
|
|
|
32208
32374
|
class ApprovalsOverlayController {
|
|
32209
32375
|
window;
|
|
32210
32376
|
documentUrl;
|
|
32377
|
+
preloadPath;
|
|
32211
32378
|
opaque;
|
|
32212
|
-
|
|
32379
|
+
respond;
|
|
32380
|
+
pageWebContents;
|
|
32381
|
+
focusTarget;
|
|
32382
|
+
onChanged;
|
|
32213
32383
|
log;
|
|
32384
|
+
onDismissAction;
|
|
32385
|
+
onDecideAction;
|
|
32214
32386
|
view;
|
|
32215
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;
|
|
32216
32406
|
pending;
|
|
32217
32407
|
ready;
|
|
32218
32408
|
visible;
|
|
@@ -32224,12 +32414,29 @@ class ApprovalsOverlayController {
|
|
|
32224
32414
|
constructor(deps) {
|
|
32225
32415
|
this.window = deps.window;
|
|
32226
32416
|
this.documentUrl = deps.documentUrl;
|
|
32417
|
+
this.preloadPath = deps.preloadPath ?? null;
|
|
32227
32418
|
this.opaque = deps.opaque === true;
|
|
32228
|
-
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;
|
|
32229
32423
|
this.log = deps.log ?? (() => {
|
|
32230
32424
|
});
|
|
32231
32425
|
this.view = null;
|
|
32232
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 };
|
|
32233
32440
|
this.pending = 0;
|
|
32234
32441
|
this.ready = false;
|
|
32235
32442
|
this.visible = false;
|
|
@@ -32242,18 +32449,191 @@ class ApprovalsOverlayController {
|
|
|
32242
32449
|
revision: 0
|
|
32243
32450
|
};
|
|
32244
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);
|
|
32245
32474
|
this.ensureChild();
|
|
32246
32475
|
}
|
|
32247
|
-
/**
|
|
32248
|
-
|
|
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) {
|
|
32249
32484
|
if (this.disposed) return;
|
|
32250
|
-
|
|
32251
|
-
|
|
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;
|
|
32252
32523
|
this.hide();
|
|
32524
|
+
this.onChanged?.();
|
|
32253
32525
|
return;
|
|
32254
32526
|
}
|
|
32255
|
-
this.updateCount();
|
|
32256
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}`);
|
|
32257
32637
|
}
|
|
32258
32638
|
/** The registry's copied layout snapshot, after every page layout pass. */
|
|
32259
32639
|
onLayout(snapshot2) {
|
|
@@ -32264,10 +32644,12 @@ class ApprovalsOverlayController {
|
|
|
32264
32644
|
revision: snapshot2.revision
|
|
32265
32645
|
};
|
|
32266
32646
|
if (!snapshot2.presented || !snapshot2.contentRect) {
|
|
32647
|
+
this.explicitOpen = false;
|
|
32648
|
+
this.pendingFocus = false;
|
|
32267
32649
|
this.hide();
|
|
32268
32650
|
return;
|
|
32269
32651
|
}
|
|
32270
|
-
if (this.
|
|
32652
|
+
if (this.model?.request) this.maybeShow();
|
|
32271
32653
|
}
|
|
32272
32654
|
facts() {
|
|
32273
32655
|
const view = this.view;
|
|
@@ -32281,6 +32663,10 @@ class ApprovalsOverlayController {
|
|
|
32281
32663
|
}
|
|
32282
32664
|
return {
|
|
32283
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 },
|
|
32284
32670
|
presented: this.layout.presented,
|
|
32285
32671
|
contentRect: this.layout.contentRect,
|
|
32286
32672
|
ready: this.ready,
|
|
@@ -32295,13 +32681,165 @@ class ApprovalsOverlayController {
|
|
|
32295
32681
|
opaque: this.opaque
|
|
32296
32682
|
};
|
|
32297
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
|
+
}
|
|
32298
32696
|
dispose(reason = "dispose") {
|
|
32299
32697
|
if (this.disposed) return;
|
|
32300
32698
|
this.disposed = true;
|
|
32301
32699
|
this.visible = false;
|
|
32302
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);
|
|
32303
32706
|
this.releaseView(reason);
|
|
32304
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
|
+
}
|
|
32305
32843
|
ensureChild() {
|
|
32306
32844
|
if (this.view || this.failedReason !== null || this.disposed) return;
|
|
32307
32845
|
this.createChild();
|
|
@@ -32321,7 +32859,8 @@ class ApprovalsOverlayController {
|
|
|
32321
32859
|
const bounds = approvalsCardBoundsFor({
|
|
32322
32860
|
contentRect: this.layout.contentRect,
|
|
32323
32861
|
naturalHeight: this.naturalHeight,
|
|
32324
|
-
opaque: this.opaque
|
|
32862
|
+
opaque: this.opaque,
|
|
32863
|
+
dir: this.dir
|
|
32325
32864
|
});
|
|
32326
32865
|
this.bounds = bounds;
|
|
32327
32866
|
if (!bounds) {
|
|
@@ -32330,7 +32869,7 @@ class ApprovalsOverlayController {
|
|
|
32330
32869
|
}
|
|
32331
32870
|
try {
|
|
32332
32871
|
const current = view.getBounds();
|
|
32333
|
-
if (current.width !== bounds.view.width
|
|
32872
|
+
if (current.width !== bounds.view.width) {
|
|
32334
32873
|
this.rebuildAt(bounds);
|
|
32335
32874
|
return;
|
|
32336
32875
|
}
|
|
@@ -32392,8 +32931,9 @@ class ApprovalsOverlayController {
|
|
|
32392
32931
|
nodeIntegration: false,
|
|
32393
32932
|
webSecurity: true,
|
|
32394
32933
|
allowRunningInsecureContent: false,
|
|
32395
|
-
//
|
|
32396
|
-
//
|
|
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 } : {},
|
|
32397
32937
|
javascript: true,
|
|
32398
32938
|
backgroundThrottling: false
|
|
32399
32939
|
}
|
|
@@ -32460,13 +33000,17 @@ class ApprovalsOverlayController {
|
|
|
32460
33000
|
measureAndShow() {
|
|
32461
33001
|
const view = this.view;
|
|
32462
33002
|
if (!view || view.webContents.isDestroyed()) return;
|
|
33003
|
+
const payload = this.modelPayload(false);
|
|
33004
|
+
if (!payload) return;
|
|
32463
33005
|
if (view.getBounds().width <= 0) {
|
|
32464
|
-
|
|
33006
|
+
void view.webContents.executeJavaScript(`window.__approvalsCard?.setModel(${payload})`).catch(() => {
|
|
33007
|
+
});
|
|
32465
33008
|
this.maybeShow();
|
|
32466
33009
|
return;
|
|
32467
33010
|
}
|
|
32468
33011
|
const measured = view.webContents.executeJavaScript(
|
|
32469
33012
|
`new Promise((resolve) => {
|
|
33013
|
+
window.__approvalsCard?.setModel(${payload});
|
|
32470
33014
|
const read = () => {
|
|
32471
33015
|
const el = document.getElementById('approvals-card');
|
|
32472
33016
|
if (!el) { resolve(0); return; }
|
|
@@ -32482,8 +33026,16 @@ class ApprovalsOverlayController {
|
|
|
32482
33026
|
el.style.maxHeight = previous;
|
|
32483
33027
|
resolve(height);
|
|
32484
33028
|
};
|
|
32485
|
-
|
|
32486
|
-
|
|
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 });
|
|
32487
33039
|
})`
|
|
32488
33040
|
);
|
|
32489
33041
|
const timer = new Promise((resolve) => {
|
|
@@ -32495,19 +33047,39 @@ class ApprovalsOverlayController {
|
|
|
32495
33047
|
this.naturalHeight = height;
|
|
32496
33048
|
}
|
|
32497
33049
|
this.maybeShow();
|
|
33050
|
+
this.focusIfPending();
|
|
32498
33051
|
}).catch((error) => {
|
|
32499
33052
|
if (this.view !== view) return;
|
|
32500
33053
|
this.fail(`measure_failed:${String(error)}`);
|
|
32501
33054
|
});
|
|
32502
|
-
this.updateCount();
|
|
32503
33055
|
this.maybeShow();
|
|
32504
33056
|
}
|
|
32505
|
-
|
|
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) {
|
|
32506
33079
|
const view = this.view;
|
|
32507
|
-
|
|
32508
|
-
|
|
32509
|
-
|
|
32510
|
-
).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(() => {
|
|
32511
33083
|
});
|
|
32512
33084
|
}
|
|
32513
33085
|
hide() {
|
|
@@ -32678,8 +33250,8 @@ function renderArg(arg) {
|
|
|
32678
33250
|
if (arg.subtype === "null") return "null";
|
|
32679
33251
|
return String(arg.type ?? "");
|
|
32680
33252
|
}
|
|
32681
|
-
function clip(
|
|
32682
|
-
return
|
|
33253
|
+
function clip(text2) {
|
|
33254
|
+
return text2.length > MAX_ARG_CHARS ? `${text2.slice(0, MAX_ARG_CHARS)}…` : text2;
|
|
32683
33255
|
}
|
|
32684
33256
|
function topFrame(stackTrace) {
|
|
32685
33257
|
const frames = stackTrace?.callFrames;
|
|
@@ -32694,11 +33266,11 @@ function routeDebuggerEvent(webContentsId, method, rawParams) {
|
|
|
32694
33266
|
const params = rawParams ?? {};
|
|
32695
33267
|
if (method === "Runtime.consoleAPICalled") {
|
|
32696
33268
|
const args = Array.isArray(params.args) ? params.args : [];
|
|
32697
|
-
const
|
|
33269
|
+
const text2 = clip(args.map(renderArg).join(" ").trim());
|
|
32698
33270
|
const frame = topFrame(params.stackTrace);
|
|
32699
33271
|
push(webContentsId, {
|
|
32700
33272
|
level: levelForConsole(params.type),
|
|
32701
|
-
text,
|
|
33273
|
+
text: text2,
|
|
32702
33274
|
source: "console",
|
|
32703
33275
|
url: frame.url,
|
|
32704
33276
|
line: frame.line,
|
|
@@ -32709,13 +33281,13 @@ function routeDebuggerEvent(webContentsId, method, rawParams) {
|
|
|
32709
33281
|
if (method === "Runtime.exceptionThrown") {
|
|
32710
33282
|
const details = params.exceptionDetails ?? {};
|
|
32711
33283
|
const exception = details.exception ?? {};
|
|
32712
|
-
const
|
|
33284
|
+
const text2 = clip(
|
|
32713
33285
|
typeof exception.description === "string" && exception.description ? exception.description : String(details.text ?? "uncaught exception")
|
|
32714
33286
|
);
|
|
32715
33287
|
const frame = topFrame(details.stackTrace);
|
|
32716
33288
|
push(webContentsId, {
|
|
32717
33289
|
level: "error",
|
|
32718
|
-
text,
|
|
33290
|
+
text: text2,
|
|
32719
33291
|
source: "exception",
|
|
32720
33292
|
url: frame.url || String(details.url ?? ""),
|
|
32721
33293
|
line: frame.line || Number(details.lineNumber ?? 0),
|
|
@@ -32725,11 +33297,11 @@ function routeDebuggerEvent(webContentsId, method, rawParams) {
|
|
|
32725
33297
|
}
|
|
32726
33298
|
if (method === "Log.entryAdded") {
|
|
32727
33299
|
const entry = params.entry ?? {};
|
|
32728
|
-
const
|
|
32729
|
-
if (!
|
|
33300
|
+
const text2 = clip(String(entry.text ?? ""));
|
|
33301
|
+
if (!text2) return;
|
|
32730
33302
|
push(webContentsId, {
|
|
32731
33303
|
level: levelForLogEntry(entry.level),
|
|
32732
|
-
text,
|
|
33304
|
+
text: text2,
|
|
32733
33305
|
source: "log-entry",
|
|
32734
33306
|
url: String(entry.url ?? ""),
|
|
32735
33307
|
line: Number(entry.lineNumber ?? 0),
|
|
@@ -40301,6 +40873,19 @@ const esUiCanvas = {
|
|
|
40301
40873
|
"ui.canvas.files.prepareError": "No se pudo preparar una copia local para esta acción",
|
|
40302
40874
|
"ui.canvas.files.pathCopyNote": "Las acciones de abrir, carpeta y ruta crean una copia local en el scratchpad de esta conversación."
|
|
40303
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
|
+
};
|
|
40304
40889
|
const esUiChatAsks = {
|
|
40305
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})}}",
|
|
40306
40891
|
"ui.chat.asks.dismiss.answered_in_chat.note": "ya respondiste en la conversación",
|
|
@@ -40329,6 +40914,41 @@ const esUiChatAttachments = {
|
|
|
40329
40914
|
"ui.chat.attachments.saved_path_copied": "Ruta de la copia guardada copiada",
|
|
40330
40915
|
"ui.chat.attachments.saved_copy_label": "Copia guardada"
|
|
40331
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
|
+
};
|
|
40332
40952
|
const esUiChatComposer = {
|
|
40333
40953
|
"ui.chat.composer.clear_message": "Borrar mensaje",
|
|
40334
40954
|
"ui.chat.composer.message": "Mensaje",
|
|
@@ -40410,9 +41030,94 @@ const esUiChatLiveUpdates = {
|
|
|
40410
41030
|
"ui.chat.live_updates.reloading": "Recargando…",
|
|
40411
41031
|
"ui.chat.live_updates.reload_failed": "No se pudo recargar esta conversación. Inténtalo de nuevo."
|
|
40412
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
|
+
};
|
|
40413
41069
|
const esUiChatResponseActions = {
|
|
40414
41070
|
"ui.chat.response_actions.label": "Acciones de la respuesta"
|
|
40415
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
|
+
};
|
|
40416
41121
|
const esUiChatSidebarView = {
|
|
40417
41122
|
"ui.chat.sidebar_view.group_by": "Agrupar por",
|
|
40418
41123
|
"ui.chat.sidebar_view.time_basis": "Base temporal",
|
|
@@ -40437,6 +41142,12 @@ const esUiChatSidebarView = {
|
|
|
40437
41142
|
"ui.chat.sidebar_view.section.agents": "Agentes",
|
|
40438
41143
|
"ui.chat.sidebar_view.section.teams": "Equipos"
|
|
40439
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
|
+
};
|
|
40440
41151
|
const esUiChatTags = {
|
|
40441
41152
|
"ui.chat.tags.label": "Etiquetas",
|
|
40442
41153
|
"ui.chat.tags.menu": "Etiquetas…",
|
|
@@ -40722,6 +41433,13 @@ const esUiCommonErrors = {
|
|
|
40722
41433
|
"ui.common.errors.error_boundary.stack_trace": "Traza de pila",
|
|
40723
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."
|
|
40724
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
|
+
};
|
|
40725
41443
|
const esUiCommonForms = {
|
|
40726
41444
|
"ui.common.forms.autocomplete_field.cancel_editing": "Cancelar la edición de {label}",
|
|
40727
41445
|
"ui.common.forms.autocomplete_field.enter_value": "Escribe un valor…",
|
|
@@ -40909,6 +41627,12 @@ const esUiCommonUpdates = {
|
|
|
40909
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}}",
|
|
40910
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}}"
|
|
40911
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
|
+
};
|
|
40912
41636
|
const esUiConsole = {
|
|
40913
41637
|
"ui.console.capacity.summary": "{live, number, ::group-off} activas de {limit, number, ::group-off} en la app",
|
|
40914
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}}",
|
|
@@ -43973,6 +44697,19 @@ const frUiCanvas = {
|
|
|
43973
44697
|
"ui.canvas.files.prepareError": "Impossible de préparer une copie locale pour cette action",
|
|
43974
44698
|
"ui.canvas.files.pathCopyNote": "Les actions Ouvrir, Dossier et Chemin créent une copie locale dans le dossier de travail de cette conversation."
|
|
43975
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
|
+
};
|
|
43976
44713
|
const frUiChatAsks = {
|
|
43977
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})}}",
|
|
43978
44715
|
"ui.chat.asks.dismiss.answered_in_chat.note": "vous avez déjà répondu dans la conversation",
|
|
@@ -44001,6 +44738,41 @@ const frUiChatAttachments = {
|
|
|
44001
44738
|
"ui.chat.attachments.saved_path_copied": "Chemin de la copie conservée copié",
|
|
44002
44739
|
"ui.chat.attachments.saved_copy_label": "Copie conservée"
|
|
44003
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
|
+
};
|
|
44004
44776
|
const frUiChatComposer = {
|
|
44005
44777
|
"ui.chat.composer.clear_message": "Effacer le message",
|
|
44006
44778
|
"ui.chat.composer.message": "Message",
|
|
@@ -44082,9 +44854,94 @@ const frUiChatLiveUpdates = {
|
|
|
44082
44854
|
"ui.chat.live_updates.reloading": "Rechargement…",
|
|
44083
44855
|
"ui.chat.live_updates.reload_failed": "Impossible de recharger cette conversation. Réessayez."
|
|
44084
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
|
+
};
|
|
44085
44893
|
const frUiChatResponseActions = {
|
|
44086
44894
|
"ui.chat.response_actions.label": "Actions de la réponse"
|
|
44087
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
|
+
};
|
|
44088
44945
|
const frUiChatSidebarView = {
|
|
44089
44946
|
"ui.chat.sidebar_view.group_by": "Grouper par",
|
|
44090
44947
|
"ui.chat.sidebar_view.time_basis": "Base temporelle",
|
|
@@ -44109,6 +44966,12 @@ const frUiChatSidebarView = {
|
|
|
44109
44966
|
"ui.chat.sidebar_view.section.agents": "Agents",
|
|
44110
44967
|
"ui.chat.sidebar_view.section.teams": "Équipes"
|
|
44111
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
|
+
};
|
|
44112
44975
|
const frUiChatTags = {
|
|
44113
44976
|
"ui.chat.tags.label": "Étiquettes",
|
|
44114
44977
|
"ui.chat.tags.menu": "Étiquettes…",
|
|
@@ -44394,6 +45257,13 @@ const frUiCommonErrors = {
|
|
|
44394
45257
|
"ui.common.errors.error_boundary.stack_trace": "Trace de la pile",
|
|
44395
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."
|
|
44396
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
|
+
};
|
|
44397
45267
|
const frUiCommonForms = {
|
|
44398
45268
|
"ui.common.forms.autocomplete_field.cancel_editing": "Annuler la modification de {label}",
|
|
44399
45269
|
"ui.common.forms.autocomplete_field.enter_value": "Saisir une valeur…",
|
|
@@ -44581,6 +45451,12 @@ const frUiCommonUpdates = {
|
|
|
44581
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}}",
|
|
44582
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}}"
|
|
44583
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
|
+
};
|
|
44584
45460
|
const frUiConsole = {
|
|
44585
45461
|
"ui.console.close.body": "Le programme en cours sera arrêté et son onglet supprimé.",
|
|
44586
45462
|
"ui.console.close.busy": "Fermeture…",
|
|
@@ -47645,6 +48521,19 @@ const hiUiCanvas = {
|
|
|
47645
48521
|
"ui.canvas.files.prepareError": "इस कार्रवाई के लिए स्थानीय कॉपी तैयार नहीं हो सकी",
|
|
47646
48522
|
"ui.canvas.files.pathCopyNote": "खोलने, फ़ोल्डर और पाथ की कार्रवाइयाँ इस बातचीत के स्क्रैचपैड में एक स्थानीय कॉपी बनाती हैं।"
|
|
47647
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
|
+
};
|
|
47648
48537
|
const hiUiChatAsks = {
|
|
47649
48538
|
"ui.chat.asks.context.messages_since": "{count, plural, one {इस सवाल के बाद से आपका # संदेश} other {इस सवाल के बाद से आपके # संदेश}} (अंतिम संदेश {time})",
|
|
47650
48539
|
"ui.chat.asks.dismiss.answered_in_chat.note": "आप बातचीत में पहले ही जवाब दे चुके हैं",
|
|
@@ -47673,6 +48562,41 @@ const hiUiChatAttachments = {
|
|
|
47673
48562
|
"ui.chat.attachments.saved_path_copied": "सहेजी गई प्रति का पाथ कॉपी हो गया",
|
|
47674
48563
|
"ui.chat.attachments.saved_copy_label": "सहेजी गई प्रति"
|
|
47675
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
|
+
};
|
|
47676
48600
|
const hiUiChatComposer = {
|
|
47677
48601
|
"ui.chat.composer.clear_message": "संदेश मिटाएँ",
|
|
47678
48602
|
"ui.chat.composer.message": "संदेश",
|
|
@@ -47754,9 +48678,94 @@ const hiUiChatLiveUpdates = {
|
|
|
47754
48678
|
"ui.chat.live_updates.reloading": "फिर से लोड हो रहा है…",
|
|
47755
48679
|
"ui.chat.live_updates.reload_failed": "यह बातचीत फिर से लोड नहीं हो सकी। फिर कोशिश करें।"
|
|
47756
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
|
+
};
|
|
47757
48717
|
const hiUiChatResponseActions = {
|
|
47758
48718
|
"ui.chat.response_actions.label": "प्रतिक्रिया की कार्रवाइयाँ"
|
|
47759
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
|
+
};
|
|
47760
48769
|
const hiUiChatSidebarView = {
|
|
47761
48770
|
"ui.chat.sidebar_view.group_by": "समूह बनाएँ",
|
|
47762
48771
|
"ui.chat.sidebar_view.time_basis": "समय का आधार",
|
|
@@ -47781,6 +48790,12 @@ const hiUiChatSidebarView = {
|
|
|
47781
48790
|
"ui.chat.sidebar_view.section.agents": "एजेंट",
|
|
47782
48791
|
"ui.chat.sidebar_view.section.teams": "टीमें"
|
|
47783
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
|
+
};
|
|
47784
48799
|
const hiUiChatTags = {
|
|
47785
48800
|
"ui.chat.tags.label": "टैग",
|
|
47786
48801
|
"ui.chat.tags.menu": "टैग…",
|
|
@@ -47850,6 +48865,17 @@ const hiUiChatTags = {
|
|
|
47850
48865
|
"ui.chat.tags.empty_title": "बातचीतों को टैग के अनुसार समूहों में रखें।",
|
|
47851
48866
|
"ui.chat.tags.empty_hint": "किसी बातचीत पर {chord} दबाएँ, या यहाँ टैग बनाएँ।"
|
|
47852
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
|
+
};
|
|
47853
48879
|
const hiUiCodeReview = {
|
|
47854
48880
|
"ui.code_review.activity.close": "बंद किया",
|
|
47855
48881
|
"ui.code_review.activity.comment": "टिप्पणी की",
|
|
@@ -48004,6 +49030,26 @@ const hiUiCommandPalette = {
|
|
|
48004
49030
|
"ui.command_palette.use_palette_sources.team_chat": "टीम चैट",
|
|
48005
49031
|
"ui.command_palette.use_palette_sources.usage_over_time": "समय के साथ उपयोग"
|
|
48006
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
|
+
};
|
|
48007
49053
|
const hiUiCommonActions = {
|
|
48008
49054
|
"ui.common.actions.cancel": "रद्द करें",
|
|
48009
49055
|
"ui.common.actions.close": "बंद करें",
|
|
@@ -48035,6 +49081,13 @@ const hiUiCommonErrors = {
|
|
|
48035
49081
|
"ui.common.errors.error_boundary.stack_trace": "स्टैक ट्रेस",
|
|
48036
49082
|
"ui.common.errors.error_boundary.the_application_encountered_an_error_try_again_or_contact_support": "ऐप में कोई त्रुटि हुई। फिर कोशिश करें, या समस्या बनी रहे तो सहायता से संपर्क करें।"
|
|
48037
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
|
+
};
|
|
48038
49091
|
const hiUiCommonForms = {
|
|
48039
49092
|
"ui.common.forms.autocomplete_field.cancel_editing": "{label} का संपादन रद्द करें",
|
|
48040
49093
|
"ui.common.forms.autocomplete_field.enter_value": "मान दर्ज करें...",
|
|
@@ -48222,6 +49275,12 @@ const hiUiCommonUpdates = {
|
|
|
48222
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} सेकंड}} से इंतज़ार है",
|
|
48223
49276
|
"ui.common.updates.wait.seconds": "अभी तक {seconds, plural, one {{seconds, number, ::group-off} सेकंड} other {{seconds, number, ::group-off} सेकंड}} से इंतज़ार है"
|
|
48224
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
|
+
};
|
|
48225
49284
|
const hiUiConsole = {
|
|
48226
49285
|
"ui.console.capacity.summary": "ऐप में {live, number, ::group-off} चालू, सीमा {limit, number, ::group-off}",
|
|
48227
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} रखे गए}}",
|
|
@@ -48997,6 +50056,17 @@ const hiUiOnboarding = {
|
|
|
48997
50056
|
"ui.onboarding.modal.step_of": "चरण {current, number, ::group-off}, कुल {total, number, ::group-off}",
|
|
48998
50057
|
"ui.onboarding.modal.steps_total": "{total, plural, one {{total, number, ::group-off} चरण} other {{total, number, ::group-off} चरण}}"
|
|
48999
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
|
+
};
|
|
49000
50070
|
const hiUiProjects = {
|
|
49001
50071
|
"ui.projects.board_window_select.projects_updated_within": "प्रोजेक्ट अपडेट अवधि",
|
|
49002
50072
|
"ui.projects.board_window_select.shows_projects_last_updated_within_this_window_older_ones_are_hid": "इस समयावधि में आख़िरी बार अपडेट हुए प्रोजेक्ट दिखाता है; पुराने प्रोजेक्ट छिपे रहते हैं।",
|
|
@@ -51275,6 +52345,19 @@ const ruUiCanvas = {
|
|
|
51275
52345
|
"ui.canvas.files.videos": "Видео",
|
|
51276
52346
|
"ui.canvas.files.working": "Рабочие файлы"
|
|
51277
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
|
+
};
|
|
51278
52361
|
const ruUiChatAsks = {
|
|
51279
52362
|
"ui.chat.asks.context.messages_since": "{count, plural, one {# сообщение от вас с момента этого запроса} few {# сообщения от вас с момента этого запроса} many {# сообщений от вас с момента этого запроса} other {# сообщения от вас с момента этого запроса}} (последнее сообщение: {time})",
|
|
51280
52363
|
"ui.chat.asks.dismiss.answered_in_chat.note": "вы уже ответили в чате",
|
|
@@ -51303,6 +52386,41 @@ const ruUiChatAttachments = {
|
|
|
51303
52386
|
"ui.chat.attachments.saved_path_copied": "Путь сохранённой копии скопирован",
|
|
51304
52387
|
"ui.chat.attachments.saved_copy_label": "Сохранённая копия"
|
|
51305
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
|
+
};
|
|
51306
52424
|
const ruUiChatComposer = {
|
|
51307
52425
|
"ui.chat.composer.ask_aside": "Спросить отдельно",
|
|
51308
52426
|
"ui.chat.composer.attach_file": "Прикрепить файл",
|
|
@@ -51384,9 +52502,94 @@ const ruUiChatLiveUpdates = {
|
|
|
51384
52502
|
"ui.chat.live_updates.reloading": "Перезагрузка…",
|
|
51385
52503
|
"ui.chat.live_updates.reload_failed": "Не удалось перезагрузить этот разговор. Повторите попытку."
|
|
51386
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
|
+
};
|
|
51387
52541
|
const ruUiChatResponseActions = {
|
|
51388
52542
|
"ui.chat.response_actions.label": "Действия с ответом"
|
|
51389
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
|
+
};
|
|
51390
52593
|
const ruUiChatSidebarView = {
|
|
51391
52594
|
"ui.chat.sidebar_view.active_first": "Сначала активные",
|
|
51392
52595
|
"ui.chat.sidebar_view.agent_team": "По агенту и команде",
|
|
@@ -51411,6 +52614,12 @@ const ruUiChatSidebarView = {
|
|
|
51411
52614
|
"ui.chat.sidebar_view.time_basis": "Отсчёт времени",
|
|
51412
52615
|
"ui.chat.sidebar_view.time_section": "По времени"
|
|
51413
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
|
+
};
|
|
51414
52623
|
const ruUiChatTags = {
|
|
51415
52624
|
"ui.chat.tags.label": "Теги",
|
|
51416
52625
|
"ui.chat.tags.menu": "Теги…",
|
|
@@ -51480,6 +52689,17 @@ const ruUiChatTags = {
|
|
|
51480
52689
|
"ui.chat.tags.empty_title": "Группируйте разговоры по тегам.",
|
|
51481
52690
|
"ui.chat.tags.empty_hint": "Нажмите {chord} на разговоре или создайте тег здесь."
|
|
51482
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
|
+
};
|
|
51483
52703
|
const ruUiCodeReview = {
|
|
51484
52704
|
"ui.code_review.activity.close": "закрыли",
|
|
51485
52705
|
"ui.code_review.activity.comment": "прокомментировали",
|
|
@@ -51685,6 +52905,13 @@ const ruUiCommonErrors = {
|
|
|
51685
52905
|
"ui.common.errors.error_boundary.stack_trace": "Трассировка стека",
|
|
51686
52906
|
"ui.common.errors.error_boundary.the_application_encountered_an_error_try_again_or_contact_support": "Приложение столкнулось с ошибкой. Повторите попытку или обратитесь в поддержку, если проблема не исчезнет."
|
|
51687
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
|
+
};
|
|
51688
52915
|
const ruUiCommonForms = {
|
|
51689
52916
|
"ui.common.forms.autocomplete_field.cancel_editing": "Отменить редактирование {label}",
|
|
51690
52917
|
"ui.common.forms.autocomplete_field.enter_value": "Введите значение…",
|
|
@@ -51872,6 +53099,12 @@ const ruUiCommonUpdates = {
|
|
|
51872
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} секунды}}",
|
|
51873
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} секунды}}"
|
|
51874
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
|
+
};
|
|
51875
53108
|
const ruUiConsole = {
|
|
51876
53109
|
"ui.console.capacity.summary": "Активных терминалов в приложении: {live, number, ::group-off} из {limit, number, ::group-off}",
|
|
51877
53110
|
"ui.console.capacity.summary_compact": "{live, number, ::group-off}/{limit, number, ::group-off} · сохранено: {archived, number, ::group-off}",
|
|
@@ -52647,6 +53880,17 @@ const ruUiOnboarding = {
|
|
|
52647
53880
|
"ui.onboarding.modal.step_of": "Шаг {current, number, ::group-off} из {total, number, ::group-off}",
|
|
52648
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} шага}}"
|
|
52649
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
|
+
};
|
|
52650
53894
|
const ruUiProjects = {
|
|
52651
53895
|
"ui.projects.board_window_select.projects_updated_within": "Проекты, обновлённые за",
|
|
52652
53896
|
"ui.projects.board_window_select.shows_projects_last_updated_within_this_window_older_ones_are_hid": "Показаны проекты, обновлённые за выбранный период; более старые скрыты.",
|
|
@@ -54925,6 +56169,19 @@ const urUiCanvas = {
|
|
|
54925
56169
|
"ui.canvas.files.prepareError": "اس عمل کے لیے مقامی نقل تیار نہیں ہو سکی",
|
|
54926
56170
|
"ui.canvas.files.pathCopyNote": "کھولنے، فولڈر اور راستے کے اعمال اس گفتگو کے اسکریچ پیڈ میں مقامی نقل بناتے ہیں۔"
|
|
54927
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
|
+
};
|
|
54928
56185
|
const urUiChatAsks = {
|
|
54929
56186
|
"ui.chat.asks.context.messages_since": "{count, plural, one {اس سوال کے بعد سے آپ کا # پیغام} other {اس سوال کے بعد سے آپ کے # پیغامات}} (آخری پیغام {time})",
|
|
54930
56187
|
"ui.chat.asks.dismiss.answered_in_chat.note": "آپ گفتگو میں پہلے ہی جواب دے چکے ہیں",
|
|
@@ -54953,6 +56210,41 @@ const urUiChatAttachments = {
|
|
|
54953
56210
|
"ui.chat.attachments.saved_path_copied": "محفوظ شدہ نقل کا راستہ نقل ہو گیا",
|
|
54954
56211
|
"ui.chat.attachments.saved_copy_label": "محفوظ شدہ نقل"
|
|
54955
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
|
+
};
|
|
54956
56248
|
const urUiChatComposer = {
|
|
54957
56249
|
"ui.chat.composer.clear_message": "پیغام صاف کریں",
|
|
54958
56250
|
"ui.chat.composer.message": "پیغام",
|
|
@@ -55034,9 +56326,94 @@ const urUiChatLiveUpdates = {
|
|
|
55034
56326
|
"ui.chat.live_updates.reloading": "دوبارہ لوڈ ہو رہا ہے…",
|
|
55035
56327
|
"ui.chat.live_updates.reload_failed": "یہ گفتگو دوبارہ لوڈ نہیں ہو سکی۔ دوبارہ کوشش کریں۔"
|
|
55036
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
|
+
};
|
|
55037
56365
|
const urUiChatResponseActions = {
|
|
55038
56366
|
"ui.chat.response_actions.label": "جواب کے اعمال"
|
|
55039
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
|
+
};
|
|
55040
56417
|
const urUiChatSidebarView = {
|
|
55041
56418
|
"ui.chat.sidebar_view.group_by": "گروہ بندی",
|
|
55042
56419
|
"ui.chat.sidebar_view.time_basis": "وقت کی بنیاد",
|
|
@@ -55061,6 +56438,12 @@ const urUiChatSidebarView = {
|
|
|
55061
56438
|
"ui.chat.sidebar_view.section.agents": "ایجنٹ",
|
|
55062
56439
|
"ui.chat.sidebar_view.section.teams": "ٹیمیں"
|
|
55063
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
|
+
};
|
|
55064
56447
|
const urUiChatTags = {
|
|
55065
56448
|
"ui.chat.tags.label": "ٹیگز",
|
|
55066
56449
|
"ui.chat.tags.menu": "ٹیگز…",
|
|
@@ -55130,6 +56513,17 @@ const urUiChatTags = {
|
|
|
55130
56513
|
"ui.chat.tags.empty_title": "گفتگوؤں کو ٹیگ کے لحاظ سے گروہ بند کریں۔",
|
|
55131
56514
|
"ui.chat.tags.empty_hint": "کسی گفتگو پر {chord} دبائیں، یا یہاں ٹیگ بنائیں۔"
|
|
55132
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
|
+
};
|
|
55133
56527
|
const urUiCodeReview = {
|
|
55134
56528
|
"ui.code_review.activity.close": "بند کیا",
|
|
55135
56529
|
"ui.code_review.activity.comment": "تبصرہ کیا",
|
|
@@ -55335,6 +56729,13 @@ const urUiCommonErrors = {
|
|
|
55335
56729
|
"ui.common.errors.error_boundary.stack_trace": "اسٹیک ٹریس",
|
|
55336
56730
|
"ui.common.errors.error_boundary.the_application_encountered_an_error_try_again_or_contact_support": "ایپ میں خرابی پیش آئی۔ دوبارہ کوشش کریں، یا مسئلہ برقرار رہنے پر معاونت سے رابطہ کریں۔"
|
|
55337
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
|
+
};
|
|
55338
56739
|
const urUiCommonForms = {
|
|
55339
56740
|
"ui.common.forms.autocomplete_field.cancel_editing": "{label} کی ترمیم منسوخ کریں",
|
|
55340
56741
|
"ui.common.forms.autocomplete_field.enter_value": "قدر درج کریں…",
|
|
@@ -55522,6 +56923,12 @@ const urUiCommonUpdates = {
|
|
|
55522
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} سیکنڈ}} انتظار ہوا",
|
|
55523
56924
|
"ui.common.updates.wait.seconds": "اب تک {seconds, plural, one {{seconds, number, ::group-off} سیکنڈ} other {{seconds, number, ::group-off} سیکنڈ}} انتظار ہوا"
|
|
55524
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
|
+
};
|
|
55525
56932
|
const urUiConsole = {
|
|
55526
56933
|
"ui.console.capacity.summary": "ایپ میں {limit, number, ::group-off} میں سے {live, number, ::group-off} فعال",
|
|
55527
56934
|
"ui.console.capacity.summary_compact": "{live, number, ::group-off}/{limit, number, ::group-off} · {archived, number, ::group-off} محفوظ",
|
|
@@ -56297,6 +57704,17 @@ const urUiOnboarding = {
|
|
|
56297
57704
|
"ui.onboarding.modal.step_of": "{total, number, ::group-off} میں سے قدم {current, number, ::group-off}",
|
|
56298
57705
|
"ui.onboarding.modal.steps_total": "{total, plural, one {{total, number, ::group-off} قدم} other {{total, number, ::group-off} قدم}}"
|
|
56299
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
|
+
};
|
|
56300
57718
|
const urUiProjects = {
|
|
56301
57719
|
"ui.projects.board_window_select.projects_updated_within": "اس مدت میں اپ ڈیٹ کیے گئے پروجیکٹ",
|
|
56302
57720
|
"ui.projects.board_window_select.shows_projects_last_updated_within_this_window_older_ones_are_hid": "اس مدت میں آخری بار اپ ڈیٹ کیے گئے پروجیکٹ دکھاتا ہے؛ پرانے پروجیکٹ چھپ جاتے ہیں۔",
|
|
@@ -58575,6 +59993,19 @@ const viUiCanvas = {
|
|
|
58575
59993
|
"ui.canvas.files.prepareError": "Không chuẩn bị được bản sao cục bộ cho thao tác này",
|
|
58576
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."
|
|
58577
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
|
+
};
|
|
58578
60009
|
const viUiChatAsks = {
|
|
58579
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})",
|
|
58580
60011
|
"ui.chat.asks.dismiss.answered_in_chat.note": "bạn đã trả lời trong cuộc trò chuyện",
|
|
@@ -58603,6 +60034,41 @@ const viUiChatAttachments = {
|
|
|
58603
60034
|
"ui.chat.attachments.saved_path_copied": "Đã sao chép đường dẫn bản sao đã lưu",
|
|
58604
60035
|
"ui.chat.attachments.saved_copy_label": "Bản sao đã lưu"
|
|
58605
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
|
+
};
|
|
58606
60072
|
const viUiChatComposer = {
|
|
58607
60073
|
"ui.chat.composer.clear_message": "Xóa tin nhắn",
|
|
58608
60074
|
"ui.chat.composer.message": "Tin nhắn",
|
|
@@ -58684,9 +60150,94 @@ const viUiChatLiveUpdates = {
|
|
|
58684
60150
|
"ui.chat.live_updates.reloading": "Đang tải lại…",
|
|
58685
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."
|
|
58686
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
|
+
};
|
|
58687
60189
|
const viUiChatResponseActions = {
|
|
58688
60190
|
"ui.chat.response_actions.label": "Thao tác phản hồi"
|
|
58689
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
|
+
};
|
|
58690
60241
|
const viUiChatSidebarView = {
|
|
58691
60242
|
"ui.chat.sidebar_view.group_by": "Nhóm theo",
|
|
58692
60243
|
"ui.chat.sidebar_view.time_basis": "Mốc thời gian",
|
|
@@ -58711,6 +60262,12 @@ const viUiChatSidebarView = {
|
|
|
58711
60262
|
"ui.chat.sidebar_view.section.agents": "Tác nhân",
|
|
58712
60263
|
"ui.chat.sidebar_view.section.teams": "Nhóm"
|
|
58713
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
|
+
};
|
|
58714
60271
|
const viUiChatTags = {
|
|
58715
60272
|
"ui.chat.tags.label": "Nhãn",
|
|
58716
60273
|
"ui.chat.tags.menu": "Nhãn…",
|
|
@@ -58780,6 +60337,17 @@ const viUiChatTags = {
|
|
|
58780
60337
|
"ui.chat.tags.empty_title": "Nhóm cuộc trò chuyện theo nhãn.",
|
|
58781
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."
|
|
58782
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
|
+
};
|
|
58783
60351
|
const viUiCodeReview = {
|
|
58784
60352
|
"ui.code_review.activity.close": "đã đóng",
|
|
58785
60353
|
"ui.code_review.activity.comment": "đã bình luận",
|
|
@@ -58985,6 +60553,13 @@ const viUiCommonErrors = {
|
|
|
58985
60553
|
"ui.common.errors.error_boundary.stack_trace": "Dấu vết ngăn xếp",
|
|
58986
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."
|
|
58987
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
|
+
};
|
|
58988
60563
|
const viUiCommonForms = {
|
|
58989
60564
|
"ui.common.forms.autocomplete_field.cancel_editing": "Hủy sửa {label}",
|
|
58990
60565
|
"ui.common.forms.autocomplete_field.enter_value": "Nhập giá trị...",
|
|
@@ -59172,6 +60747,12 @@ const viUiCommonUpdates = {
|
|
|
59172
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}}",
|
|
59173
60748
|
"ui.common.updates.wait.seconds": "Đã chờ {seconds, plural, other {{seconds, number, ::group-off} giây}}"
|
|
59174
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
|
+
};
|
|
59175
60756
|
const viUiConsole = {
|
|
59176
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",
|
|
59177
60758
|
"ui.console.capacity.summary_compact": "{live, number, ::group-off}/{limit, number, ::group-off} · giữ lại {archived, number, ::group-off}",
|
|
@@ -59947,6 +61528,17 @@ const viUiOnboarding = {
|
|
|
59947
61528
|
"ui.onboarding.modal.step_of": "Bước {current, number, ::group-off} trên {total, number, ::group-off}",
|
|
59948
61529
|
"ui.onboarding.modal.steps_total": "{total, plural, other {{total, number, ::group-off} bước}}"
|
|
59949
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
|
+
};
|
|
59950
61542
|
const viUiProjects = {
|
|
59951
61543
|
"ui.projects.board_window_select.projects_updated_within": "Dự án cập nhật trong",
|
|
59952
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.",
|
|
@@ -60373,6 +61965,197 @@ const viUiProjects = {
|
|
|
60373
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}",
|
|
60374
61966
|
"ui.projects.use_request_update.the_request_could_not_be_confirmed": "Không thể xác nhận yêu cầu."
|
|
60375
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
|
+
};
|
|
60376
62159
|
const viUiSchedules = {
|
|
60377
62160
|
"ui.schedules.count.hidden": "Hiện thêm {hidden, plural, other {{hidden, number, ::group-off} lịch đánh thức}}",
|
|
60378
62161
|
"ui.schedules.count.keep_runs": "Giữ nguyên {left, plural, other {{left, number, ::group-off} lần chạy}} còn lại",
|
|
@@ -62034,6 +63817,19 @@ const zhCNUiCanvas = {
|
|
|
62034
63817
|
"ui.canvas.files.prepareError": "无法为此操作准备本地副本",
|
|
62035
63818
|
"ui.canvas.files.pathCopyNote": "打开文件、打开文件夹及路径相关操作会在此对话的暂存区中创建本地副本。"
|
|
62036
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
|
+
};
|
|
62037
63833
|
const zhCNUiChatAsks = {
|
|
62038
63834
|
"ui.chat.asks.context.messages_since": "{count, plural, other {自提出这个请求以来你发来了#条消息}}(最后一条消息于{time})",
|
|
62039
63835
|
"ui.chat.asks.dismiss.answered_in_chat.note": "你已在对话中回复过",
|
|
@@ -62062,6 +63858,41 @@ const zhCNUiChatAttachments = {
|
|
|
62062
63858
|
"ui.chat.attachments.saved_path_copied": "已复制保存副本的路径",
|
|
62063
63859
|
"ui.chat.attachments.saved_copy_label": "保存的副本"
|
|
62064
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
|
+
};
|
|
62065
63896
|
const zhCNUiChatComposer = {
|
|
62066
63897
|
"ui.chat.composer.clear_message": "清空消息",
|
|
62067
63898
|
"ui.chat.composer.message": "消息",
|
|
@@ -62143,9 +63974,94 @@ const zhCNUiChatLiveUpdates = {
|
|
|
62143
63974
|
"ui.chat.live_updates.reloading": "正在重新加载……",
|
|
62144
63975
|
"ui.chat.live_updates.reload_failed": "无法重新加载此对话,请重试。"
|
|
62145
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
|
+
};
|
|
62146
64013
|
const zhCNUiChatResponseActions = {
|
|
62147
64014
|
"ui.chat.response_actions.label": "回复操作"
|
|
62148
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
|
+
};
|
|
62149
64065
|
const zhCNUiChatSidebarView = {
|
|
62150
64066
|
"ui.chat.sidebar_view.group_by": "分组方式",
|
|
62151
64067
|
"ui.chat.sidebar_view.time_basis": "时间依据",
|
|
@@ -62170,6 +64086,12 @@ const zhCNUiChatSidebarView = {
|
|
|
62170
64086
|
"ui.chat.sidebar_view.section.agents": "智能体",
|
|
62171
64087
|
"ui.chat.sidebar_view.section.teams": "团队"
|
|
62172
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
|
+
};
|
|
62173
64095
|
const zhCNUiChatTags = {
|
|
62174
64096
|
"ui.chat.tags.label": "标签",
|
|
62175
64097
|
"ui.chat.tags.menu": "标签……",
|
|
@@ -62455,6 +64377,13 @@ const zhCNUiCommonErrors = {
|
|
|
62455
64377
|
"ui.common.errors.error_boundary.stack_trace": "堆栈轨迹",
|
|
62456
64378
|
"ui.common.errors.error_boundary.the_application_encountered_an_error_try_again_or_contact_support": "应用出现错误。请重试,若问题仍然存在,请联系支持团队。"
|
|
62457
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
|
+
};
|
|
62458
64387
|
const zhCNUiCommonForms = {
|
|
62459
64388
|
"ui.common.forms.autocomplete_field.cancel_editing": "取消编辑{label}",
|
|
62460
64389
|
"ui.common.forms.autocomplete_field.enter_value": "输入值……",
|
|
@@ -62642,6 +64571,12 @@ const zhCNUiCommonUpdates = {
|
|
|
62642
64571
|
"ui.common.updates.wait.minutes_seconds": "已等待{minutes, plural, other {{minutes, number, ::group-off}分钟}}{seconds, plural, other {{seconds, number, ::group-off}秒}}",
|
|
62643
64572
|
"ui.common.updates.wait.seconds": "已等待{seconds, plural, other {{seconds, number, ::group-off}秒}}"
|
|
62644
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
|
+
};
|
|
62645
64580
|
const zhCNUiConsole = {
|
|
62646
64581
|
"ui.console.capacity.summary": "应用中运行{live, number, ::group-off}个,上限{limit, number, ::group-off}个",
|
|
62647
64582
|
"ui.console.capacity.summary_compact": "{live, number, ::group-off}/{limit, number, ::group-off} · 已保留{archived, number, ::group-off}个",
|
|
@@ -65169,16 +67104,23 @@ const bundledCatalogues = {
|
|
|
65169
67104
|
...esUiBrowserChrome,
|
|
65170
67105
|
...esUiBrowser,
|
|
65171
67106
|
...esUiCanvas,
|
|
67107
|
+
...esUiChatAnalytics,
|
|
65172
67108
|
...esUiChatAsks,
|
|
65173
67109
|
...esUiChatAttachments,
|
|
67110
|
+
...esUiChatCanonical,
|
|
67111
|
+
...esUiChatCommentaryActions,
|
|
65174
67112
|
...esUiChatComposer,
|
|
65175
67113
|
...esUiChatComposerMedia,
|
|
65176
67114
|
...esUiChatDialogs,
|
|
65177
67115
|
...esUiChatHeader,
|
|
65178
67116
|
...esUiChat,
|
|
65179
67117
|
...esUiChatLiveUpdates,
|
|
67118
|
+
...esUiChatPickers,
|
|
65180
67119
|
...esUiChatResponseActions,
|
|
67120
|
+
...esUiChatRunDetails,
|
|
67121
|
+
...esUiChatSidebar,
|
|
65181
67122
|
...esUiChatSidebarView,
|
|
67123
|
+
...esUiChatTagDialogs,
|
|
65182
67124
|
...esUiChatTags,
|
|
65183
67125
|
...esUiChatTranscriptCopy,
|
|
65184
67126
|
...esUiCodeReview,
|
|
@@ -65188,10 +67130,12 @@ const bundledCatalogues = {
|
|
|
65188
67130
|
...esUiCommonConnection,
|
|
65189
67131
|
...esUiCommonEditing,
|
|
65190
67132
|
...esUiCommonErrors,
|
|
67133
|
+
...esUiCommonFileActions,
|
|
65191
67134
|
...esUiCommonForms,
|
|
65192
67135
|
...esUiCommonLoading,
|
|
65193
67136
|
...esUiCommonModels,
|
|
65194
67137
|
...esUiCommonUpdates,
|
|
67138
|
+
...esUiCommonViewer,
|
|
65195
67139
|
...esUiConsole,
|
|
65196
67140
|
...esUiHubComments,
|
|
65197
67141
|
...esUiHub,
|
|
@@ -65235,16 +67179,23 @@ const bundledCatalogues = {
|
|
|
65235
67179
|
...frUiBrowserChrome,
|
|
65236
67180
|
...frUiBrowser,
|
|
65237
67181
|
...frUiCanvas,
|
|
67182
|
+
...frUiChatAnalytics,
|
|
65238
67183
|
...frUiChatAsks,
|
|
65239
67184
|
...frUiChatAttachments,
|
|
67185
|
+
...frUiChatCanonical,
|
|
67186
|
+
...frUiChatCommentaryActions,
|
|
65240
67187
|
...frUiChatComposer,
|
|
65241
67188
|
...frUiChatComposerMedia,
|
|
65242
67189
|
...frUiChatDialogs,
|
|
65243
67190
|
...frUiChatHeader,
|
|
65244
67191
|
...frUiChat,
|
|
65245
67192
|
...frUiChatLiveUpdates,
|
|
67193
|
+
...frUiChatPickers,
|
|
65246
67194
|
...frUiChatResponseActions,
|
|
67195
|
+
...frUiChatRunDetails,
|
|
67196
|
+
...frUiChatSidebar,
|
|
65247
67197
|
...frUiChatSidebarView,
|
|
67198
|
+
...frUiChatTagDialogs,
|
|
65248
67199
|
...frUiChatTags,
|
|
65249
67200
|
...frUiChatTranscriptCopy,
|
|
65250
67201
|
...frUiCodeReview,
|
|
@@ -65254,10 +67205,12 @@ const bundledCatalogues = {
|
|
|
65254
67205
|
...frUiCommonConnection,
|
|
65255
67206
|
...frUiCommonEditing,
|
|
65256
67207
|
...frUiCommonErrors,
|
|
67208
|
+
...frUiCommonFileActions,
|
|
65257
67209
|
...frUiCommonForms,
|
|
65258
67210
|
...frUiCommonLoading,
|
|
65259
67211
|
...frUiCommonModels,
|
|
65260
67212
|
...frUiCommonUpdates,
|
|
67213
|
+
...frUiCommonViewer,
|
|
65261
67214
|
...frUiConsole,
|
|
65262
67215
|
...frUiHubComments,
|
|
65263
67216
|
...frUiHub,
|
|
@@ -65301,27 +67254,38 @@ const bundledCatalogues = {
|
|
|
65301
67254
|
...hiUiBrowserChrome,
|
|
65302
67255
|
...hiUiBrowser,
|
|
65303
67256
|
...hiUiCanvas,
|
|
67257
|
+
...hiUiChatAnalytics,
|
|
65304
67258
|
...hiUiChatAsks,
|
|
65305
67259
|
...hiUiChatAttachments,
|
|
67260
|
+
...hiUiChatCanonical,
|
|
67261
|
+
...hiUiChatCommentaryActions,
|
|
65306
67262
|
...hiUiChatComposer,
|
|
65307
67263
|
...hiUiChatComposerMedia,
|
|
65308
67264
|
...hiUiChatDialogs,
|
|
65309
67265
|
...hiUiChatHeader,
|
|
65310
67266
|
...hiUiChat,
|
|
65311
67267
|
...hiUiChatLiveUpdates,
|
|
67268
|
+
...hiUiChatPickers,
|
|
65312
67269
|
...hiUiChatResponseActions,
|
|
67270
|
+
...hiUiChatRunDetails,
|
|
67271
|
+
...hiUiChatSidebar,
|
|
65313
67272
|
...hiUiChatSidebarView,
|
|
67273
|
+
...hiUiChatTagDialogs,
|
|
65314
67274
|
...hiUiChatTags,
|
|
67275
|
+
...hiUiChatTranscriptCopy,
|
|
65315
67276
|
...hiUiCodeReview,
|
|
65316
67277
|
...hiUiCommandPalette,
|
|
67278
|
+
...hiUiCommonAccount,
|
|
65317
67279
|
...hiUiCommonActions,
|
|
65318
67280
|
...hiUiCommonConnection,
|
|
65319
67281
|
...hiUiCommonEditing,
|
|
65320
67282
|
...hiUiCommonErrors,
|
|
67283
|
+
...hiUiCommonFileActions,
|
|
65321
67284
|
...hiUiCommonForms,
|
|
65322
67285
|
...hiUiCommonLoading,
|
|
65323
67286
|
...hiUiCommonModels,
|
|
65324
67287
|
...hiUiCommonUpdates,
|
|
67288
|
+
...hiUiCommonViewer,
|
|
65325
67289
|
...hiUiConsole,
|
|
65326
67290
|
...hiUiHubComments,
|
|
65327
67291
|
...hiUiHub,
|
|
@@ -65330,6 +67294,7 @@ const bundledCatalogues = {
|
|
|
65330
67294
|
...hiUiLibrary,
|
|
65331
67295
|
...hiUiMesh,
|
|
65332
67296
|
...hiUiOnboarding,
|
|
67297
|
+
...hiUiPresence,
|
|
65333
67298
|
...hiUiProjects,
|
|
65334
67299
|
...hiUiProviders,
|
|
65335
67300
|
...hiUiSchedules,
|
|
@@ -65364,17 +67329,25 @@ const bundledCatalogues = {
|
|
|
65364
67329
|
...ruUiBrowserChrome,
|
|
65365
67330
|
...ruUiBrowser,
|
|
65366
67331
|
...ruUiCanvas,
|
|
67332
|
+
...ruUiChatAnalytics,
|
|
65367
67333
|
...ruUiChatAsks,
|
|
65368
67334
|
...ruUiChatAttachments,
|
|
67335
|
+
...ruUiChatCanonical,
|
|
67336
|
+
...ruUiChatCommentaryActions,
|
|
65369
67337
|
...ruUiChatComposer,
|
|
65370
67338
|
...ruUiChatComposerMedia,
|
|
65371
67339
|
...ruUiChatDialogs,
|
|
65372
67340
|
...ruUiChatHeader,
|
|
65373
67341
|
...ruUiChat,
|
|
65374
67342
|
...ruUiChatLiveUpdates,
|
|
67343
|
+
...ruUiChatPickers,
|
|
65375
67344
|
...ruUiChatResponseActions,
|
|
67345
|
+
...ruUiChatRunDetails,
|
|
67346
|
+
...ruUiChatSidebar,
|
|
65376
67347
|
...ruUiChatSidebarView,
|
|
67348
|
+
...ruUiChatTagDialogs,
|
|
65377
67349
|
...ruUiChatTags,
|
|
67350
|
+
...ruUiChatTranscriptCopy,
|
|
65378
67351
|
...ruUiCodeReview,
|
|
65379
67352
|
...ruUiCommandPalette,
|
|
65380
67353
|
...ruUiCommonAccount,
|
|
@@ -65382,10 +67355,12 @@ const bundledCatalogues = {
|
|
|
65382
67355
|
...ruUiCommonConnection,
|
|
65383
67356
|
...ruUiCommonEditing,
|
|
65384
67357
|
...ruUiCommonErrors,
|
|
67358
|
+
...ruUiCommonFileActions,
|
|
65385
67359
|
...ruUiCommonForms,
|
|
65386
67360
|
...ruUiCommonLoading,
|
|
65387
67361
|
...ruUiCommonModels,
|
|
65388
67362
|
...ruUiCommonUpdates,
|
|
67363
|
+
...ruUiCommonViewer,
|
|
65389
67364
|
...ruUiConsole,
|
|
65390
67365
|
...ruUiHubComments,
|
|
65391
67366
|
...ruUiHub,
|
|
@@ -65394,6 +67369,7 @@ const bundledCatalogues = {
|
|
|
65394
67369
|
...ruUiLibrary,
|
|
65395
67370
|
...ruUiMesh,
|
|
65396
67371
|
...ruUiOnboarding,
|
|
67372
|
+
...ruUiPresence,
|
|
65397
67373
|
...ruUiProjects,
|
|
65398
67374
|
...ruUiProviders,
|
|
65399
67375
|
...ruUiSchedules,
|
|
@@ -65428,17 +67404,25 @@ const bundledCatalogues = {
|
|
|
65428
67404
|
...urUiBrowserChrome,
|
|
65429
67405
|
...urUiBrowser,
|
|
65430
67406
|
...urUiCanvas,
|
|
67407
|
+
...urUiChatAnalytics,
|
|
65431
67408
|
...urUiChatAsks,
|
|
65432
67409
|
...urUiChatAttachments,
|
|
67410
|
+
...urUiChatCanonical,
|
|
67411
|
+
...urUiChatCommentaryActions,
|
|
65433
67412
|
...urUiChatComposer,
|
|
65434
67413
|
...urUiChatComposerMedia,
|
|
65435
67414
|
...urUiChatDialogs,
|
|
65436
67415
|
...urUiChatHeader,
|
|
65437
67416
|
...urUiChat,
|
|
65438
67417
|
...urUiChatLiveUpdates,
|
|
67418
|
+
...urUiChatPickers,
|
|
65439
67419
|
...urUiChatResponseActions,
|
|
67420
|
+
...urUiChatRunDetails,
|
|
67421
|
+
...urUiChatSidebar,
|
|
65440
67422
|
...urUiChatSidebarView,
|
|
67423
|
+
...urUiChatTagDialogs,
|
|
65441
67424
|
...urUiChatTags,
|
|
67425
|
+
...urUiChatTranscriptCopy,
|
|
65442
67426
|
...urUiCodeReview,
|
|
65443
67427
|
...urUiCommandPalette,
|
|
65444
67428
|
...urUiCommonAccount,
|
|
@@ -65446,10 +67430,12 @@ const bundledCatalogues = {
|
|
|
65446
67430
|
...urUiCommonConnection,
|
|
65447
67431
|
...urUiCommonEditing,
|
|
65448
67432
|
...urUiCommonErrors,
|
|
67433
|
+
...urUiCommonFileActions,
|
|
65449
67434
|
...urUiCommonForms,
|
|
65450
67435
|
...urUiCommonLoading,
|
|
65451
67436
|
...urUiCommonModels,
|
|
65452
67437
|
...urUiCommonUpdates,
|
|
67438
|
+
...urUiCommonViewer,
|
|
65453
67439
|
...urUiConsole,
|
|
65454
67440
|
...urUiHubComments,
|
|
65455
67441
|
...urUiHub,
|
|
@@ -65458,6 +67444,7 @@ const bundledCatalogues = {
|
|
|
65458
67444
|
...urUiLibrary,
|
|
65459
67445
|
...urUiMesh,
|
|
65460
67446
|
...urUiOnboarding,
|
|
67447
|
+
...urUiPresence,
|
|
65461
67448
|
...urUiProjects,
|
|
65462
67449
|
...urUiProviders,
|
|
65463
67450
|
...urUiSchedules,
|
|
@@ -65492,17 +67479,25 @@ const bundledCatalogues = {
|
|
|
65492
67479
|
...viUiBrowserChrome,
|
|
65493
67480
|
...viUiBrowser,
|
|
65494
67481
|
...viUiCanvas,
|
|
67482
|
+
...viUiChatAnalytics,
|
|
65495
67483
|
...viUiChatAsks,
|
|
65496
67484
|
...viUiChatAttachments,
|
|
67485
|
+
...viUiChatCanonical,
|
|
67486
|
+
...viUiChatCommentaryActions,
|
|
65497
67487
|
...viUiChatComposer,
|
|
65498
67488
|
...viUiChatComposerMedia,
|
|
65499
67489
|
...viUiChatDialogs,
|
|
65500
67490
|
...viUiChatHeader,
|
|
65501
67491
|
...viUiChat,
|
|
65502
67492
|
...viUiChatLiveUpdates,
|
|
67493
|
+
...viUiChatPickers,
|
|
65503
67494
|
...viUiChatResponseActions,
|
|
67495
|
+
...viUiChatRunDetails,
|
|
67496
|
+
...viUiChatSidebar,
|
|
65504
67497
|
...viUiChatSidebarView,
|
|
67498
|
+
...viUiChatTagDialogs,
|
|
65505
67499
|
...viUiChatTags,
|
|
67500
|
+
...viUiChatTranscriptCopy,
|
|
65506
67501
|
...viUiCodeReview,
|
|
65507
67502
|
...viUiCommandPalette,
|
|
65508
67503
|
...viUiCommonAccount,
|
|
@@ -65510,10 +67505,12 @@ const bundledCatalogues = {
|
|
|
65510
67505
|
...viUiCommonConnection,
|
|
65511
67506
|
...viUiCommonEditing,
|
|
65512
67507
|
...viUiCommonErrors,
|
|
67508
|
+
...viUiCommonFileActions,
|
|
65513
67509
|
...viUiCommonForms,
|
|
65514
67510
|
...viUiCommonLoading,
|
|
65515
67511
|
...viUiCommonModels,
|
|
65516
67512
|
...viUiCommonUpdates,
|
|
67513
|
+
...viUiCommonViewer,
|
|
65517
67514
|
...viUiConsole,
|
|
65518
67515
|
...viUiHubComments,
|
|
65519
67516
|
...viUiHub,
|
|
@@ -65522,7 +67519,9 @@ const bundledCatalogues = {
|
|
|
65522
67519
|
...viUiLibrary,
|
|
65523
67520
|
...viUiMesh,
|
|
65524
67521
|
...viUiOnboarding,
|
|
67522
|
+
...viUiPresence,
|
|
65525
67523
|
...viUiProjects,
|
|
67524
|
+
...viUiProviders,
|
|
65526
67525
|
...viUiSchedules,
|
|
65527
67526
|
...viUiSettingsAccount,
|
|
65528
67527
|
...viUiSettingsAppearance,
|
|
@@ -65555,16 +67554,23 @@ const bundledCatalogues = {
|
|
|
65555
67554
|
...zhCNUiBrowserChrome,
|
|
65556
67555
|
...zhCNUiBrowser,
|
|
65557
67556
|
...zhCNUiCanvas,
|
|
67557
|
+
...zhCNUiChatAnalytics,
|
|
65558
67558
|
...zhCNUiChatAsks,
|
|
65559
67559
|
...zhCNUiChatAttachments,
|
|
67560
|
+
...zhCNUiChatCanonical,
|
|
67561
|
+
...zhCNUiChatCommentaryActions,
|
|
65560
67562
|
...zhCNUiChatComposer,
|
|
65561
67563
|
...zhCNUiChatComposerMedia,
|
|
65562
67564
|
...zhCNUiChatDialogs,
|
|
65563
67565
|
...zhCNUiChatHeader,
|
|
65564
67566
|
...zhCNUiChat,
|
|
65565
67567
|
...zhCNUiChatLiveUpdates,
|
|
67568
|
+
...zhCNUiChatPickers,
|
|
65566
67569
|
...zhCNUiChatResponseActions,
|
|
67570
|
+
...zhCNUiChatRunDetails,
|
|
67571
|
+
...zhCNUiChatSidebar,
|
|
65567
67572
|
...zhCNUiChatSidebarView,
|
|
67573
|
+
...zhCNUiChatTagDialogs,
|
|
65568
67574
|
...zhCNUiChatTags,
|
|
65569
67575
|
...zhCNUiChatTranscriptCopy,
|
|
65570
67576
|
...zhCNUiCodeReview,
|
|
@@ -65574,10 +67580,12 @@ const bundledCatalogues = {
|
|
|
65574
67580
|
...zhCNUiCommonConnection,
|
|
65575
67581
|
...zhCNUiCommonEditing,
|
|
65576
67582
|
...zhCNUiCommonErrors,
|
|
67583
|
+
...zhCNUiCommonFileActions,
|
|
65577
67584
|
...zhCNUiCommonForms,
|
|
65578
67585
|
...zhCNUiCommonLoading,
|
|
65579
67586
|
...zhCNUiCommonModels,
|
|
65580
67587
|
...zhCNUiCommonUpdates,
|
|
67588
|
+
...zhCNUiCommonViewer,
|
|
65581
67589
|
...zhCNUiConsole,
|
|
65582
67590
|
...zhCNUiHubComments,
|
|
65583
67591
|
...zhCNUiHub,
|
|
@@ -65898,31 +67906,31 @@ function normalise(value) {
|
|
|
65898
67906
|
return String(value ?? "").replace(/\s+/g, " ").trim();
|
|
65899
67907
|
}
|
|
65900
67908
|
function readValue(raw) {
|
|
65901
|
-
const
|
|
65902
|
-
if (!
|
|
65903
|
-
const quote =
|
|
67909
|
+
const text2 = raw.trim();
|
|
67910
|
+
if (!text2) return null;
|
|
67911
|
+
const quote = text2[0];
|
|
65904
67912
|
if (quote === '"' || quote === "'") {
|
|
65905
67913
|
let value = "";
|
|
65906
|
-
for (let index = 1; index <
|
|
65907
|
-
const char =
|
|
65908
|
-
if (char === "\\" && index + 1 <
|
|
65909
|
-
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] ?? "";
|
|
65910
67918
|
index += 1;
|
|
65911
67919
|
continue;
|
|
65912
67920
|
}
|
|
65913
67921
|
if (char === quote) {
|
|
65914
|
-
return index ===
|
|
67922
|
+
return index === text2.length - 1 ? value : null;
|
|
65915
67923
|
}
|
|
65916
67924
|
value += char;
|
|
65917
67925
|
}
|
|
65918
67926
|
return null;
|
|
65919
67927
|
}
|
|
65920
|
-
if (/[\[\]]/.test(
|
|
65921
|
-
return
|
|
67928
|
+
if (/[\[\]]/.test(text2) || text2.startsWith("*")) return null;
|
|
67929
|
+
return text2;
|
|
65922
67930
|
}
|
|
65923
67931
|
function parseLocator(value) {
|
|
65924
|
-
const
|
|
65925
|
-
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);
|
|
65926
67934
|
if (!match) return null;
|
|
65927
67935
|
const kind = (match[1] ?? "").toLowerCase();
|
|
65928
67936
|
const prefixSubstring = match[2] === "*";
|
|
@@ -66493,8 +68501,8 @@ function compactAX(nodes, epoch, options = {}) {
|
|
|
66493
68501
|
scoped: scopeId !== void 0
|
|
66494
68502
|
};
|
|
66495
68503
|
}
|
|
66496
|
-
function windowSnapshot(
|
|
66497
|
-
const lines =
|
|
68504
|
+
function windowSnapshot(text2, options = {}) {
|
|
68505
|
+
const lines = text2 ? text2.split("\n").filter((line) => line.length > 0) : [];
|
|
66498
68506
|
const totalLines = lines.length;
|
|
66499
68507
|
const search = String(options.search ?? "").trim();
|
|
66500
68508
|
const matched = search ? lines.filter((line) => line.toLowerCase().includes(search.toLowerCase())) : lines;
|
|
@@ -66562,9 +68570,9 @@ async function read(ctx, params) {
|
|
|
66562
68570
|
const record = ctx.registry.requireSurface(params.tab);
|
|
66563
68571
|
const selector = stringParam(params, "selector") || "body";
|
|
66564
68572
|
const code = `(${READ_FUNCTION})(${JSON.stringify(selector)})`;
|
|
66565
|
-
let
|
|
68573
|
+
let text2;
|
|
66566
68574
|
try {
|
|
66567
|
-
|
|
68575
|
+
text2 = await deadline(
|
|
66568
68576
|
record.view.webContents.executeJavaScriptInIsolatedWorld(
|
|
66569
68577
|
ISOLATED_WORLD_ID,
|
|
66570
68578
|
[{ code }]
|
|
@@ -66581,14 +68589,14 @@ async function read(ctx, params) {
|
|
|
66581
68589
|
}
|
|
66582
68590
|
throw error;
|
|
66583
68591
|
}
|
|
66584
|
-
if (
|
|
68592
|
+
if (text2 === null || text2 === void 0) {
|
|
66585
68593
|
throw new BridgeCommandError(
|
|
66586
68594
|
"element_not_found",
|
|
66587
68595
|
`selector ${selector} matched nothing`
|
|
66588
68596
|
);
|
|
66589
68597
|
}
|
|
66590
68598
|
ctx.registry.touch(record);
|
|
66591
|
-
return { text: String(
|
|
68599
|
+
return { text: String(text2), ...pageOf(record.view) };
|
|
66592
68600
|
}
|
|
66593
68601
|
async function snapshot(ctx, params) {
|
|
66594
68602
|
const record = ctx.registry.requireSurface(params.tab);
|
|
@@ -67312,8 +69320,8 @@ async function type(ctx, params) {
|
|
|
67312
69320
|
const contents = record.view.webContents;
|
|
67313
69321
|
const target2 = targetOf(params);
|
|
67314
69322
|
const node = await resolveNode(ctx, record, target2);
|
|
67315
|
-
const
|
|
67316
|
-
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);
|
|
67317
69325
|
if (typed) {
|
|
67318
69326
|
ctx.registry.touch(record);
|
|
67319
69327
|
return {
|
|
@@ -67333,7 +69341,7 @@ async function type(ctx, params) {
|
|
|
67333
69341
|
sessionId: frame.sessionId,
|
|
67334
69342
|
frame
|
|
67335
69343
|
};
|
|
67336
|
-
const typedInFrame = await typeInto(ctx, contents, inner,
|
|
69344
|
+
const typedInFrame = await typeInto(ctx, contents, inner, text2, target2);
|
|
67337
69345
|
if (typedInFrame) {
|
|
67338
69346
|
ctx.registry.touch(record);
|
|
67339
69347
|
return {
|
|
@@ -67352,9 +69360,9 @@ const NON_ALPHANUMERIC = /[^\p{L}\p{N}]+/gu;
|
|
|
67352
69360
|
function foldForComparison(value) {
|
|
67353
69361
|
return value.normalize("NFKC").toLowerCase().replace(NON_ALPHANUMERIC, "");
|
|
67354
69362
|
}
|
|
67355
|
-
function holdsTypedText(readBack2,
|
|
67356
|
-
const folded = foldForComparison(
|
|
67357
|
-
if (folded === "") return readBack2.includes(
|
|
69363
|
+
function holdsTypedText(readBack2, text2) {
|
|
69364
|
+
const folded = foldForComparison(text2);
|
|
69365
|
+
if (folded === "") return readBack2.includes(text2);
|
|
67358
69366
|
return foldForComparison(readBack2).includes(folded);
|
|
67359
69367
|
}
|
|
67360
69368
|
const SETTLE_BEFORE_REREAD_MS = 100;
|
|
@@ -67363,7 +69371,7 @@ function quoteReadBack(value) {
|
|
|
67363
69371
|
if (value.length <= MAX_QUOTED_READBACK) return `'${value}'`;
|
|
67364
69372
|
return `'${value.slice(0, MAX_QUOTED_READBACK)}…' (${value.length} chars)`;
|
|
67365
69373
|
}
|
|
67366
|
-
async function typeInto(ctx, contents, node,
|
|
69374
|
+
async function typeInto(ctx, contents, node, text2, target2) {
|
|
67367
69375
|
const focus = await sendIn(
|
|
67368
69376
|
ctx,
|
|
67369
69377
|
contents,
|
|
@@ -67382,9 +69390,9 @@ async function typeInto(ctx, contents, node, text, target2) {
|
|
|
67382
69390
|
"the editable target could not retain focus, so nothing was typed"
|
|
67383
69391
|
);
|
|
67384
69392
|
}
|
|
67385
|
-
await sendIn(ctx, contents, node.sessionId, "Input.insertText", { text });
|
|
69393
|
+
await sendIn(ctx, contents, node.sessionId, "Input.insertText", { text: text2 });
|
|
67386
69394
|
const readBack2 = await conversationReadBack(ctx, node, contents);
|
|
67387
|
-
if (holdsTypedText(readBack2,
|
|
69395
|
+
if (holdsTypedText(readBack2, text2)) {
|
|
67388
69396
|
return { value: readBack2, via: "insert_text" };
|
|
67389
69397
|
}
|
|
67390
69398
|
const set2 = await sendIn(
|
|
@@ -67395,7 +69403,7 @@ async function typeInto(ctx, contents, node, text, target2) {
|
|
|
67395
69403
|
{
|
|
67396
69404
|
objectId: node.objectId,
|
|
67397
69405
|
functionDeclaration: SET_VALUE_FUNCTION,
|
|
67398
|
-
arguments: [{ value:
|
|
69406
|
+
arguments: [{ value: text2 }],
|
|
67399
69407
|
returnByValue: true
|
|
67400
69408
|
}
|
|
67401
69409
|
);
|
|
@@ -67403,7 +69411,7 @@ async function typeInto(ctx, contents, node, text, target2) {
|
|
|
67403
69411
|
if (setValue === null) return null;
|
|
67404
69412
|
await sleep(SETTLE_BEFORE_REREAD_MS);
|
|
67405
69413
|
const settled = await conversationReadBack(ctx, node, contents);
|
|
67406
|
-
if (holdsTypedText(settled,
|
|
69414
|
+
if (holdsTypedText(settled, text2)) {
|
|
67407
69415
|
return {
|
|
67408
69416
|
value: settled,
|
|
67409
69417
|
via: "value_setter",
|
|
@@ -68447,12 +70455,12 @@ const WINDOWS_RESERVED_STEMS = /* @__PURE__ */ new Set([
|
|
|
68447
70455
|
"lpt8",
|
|
68448
70456
|
"lpt9"
|
|
68449
70457
|
]);
|
|
68450
|
-
function bytesOf(
|
|
68451
|
-
return new TextEncoder().encode(
|
|
70458
|
+
function bytesOf(text2) {
|
|
70459
|
+
return new TextEncoder().encode(text2).length;
|
|
68452
70460
|
}
|
|
68453
|
-
function fallbackDigest(
|
|
70461
|
+
function fallbackDigest(text2) {
|
|
68454
70462
|
let hash = 2166136261;
|
|
68455
|
-
for (const byte of new TextEncoder().encode(
|
|
70463
|
+
for (const byte of new TextEncoder().encode(text2)) {
|
|
68456
70464
|
hash = Math.imul(hash ^ byte, 16777619) >>> 0;
|
|
68457
70465
|
}
|
|
68458
70466
|
return hash.toString(16).padStart(8, "0");
|
|
@@ -69581,6 +71589,8 @@ class BrowserHost {
|
|
|
69581
71589
|
facts;
|
|
69582
71590
|
/** The session's per-origin storage clear, injected (see `BrowserHostOptions`). */
|
|
69583
71591
|
forgetSiteData;
|
|
71592
|
+
/** S6b's native card, when the launch built one (see `BrowserHostOptions`). */
|
|
71593
|
+
approvalsCard;
|
|
69584
71594
|
/** S4b's popout health, read from the controller (or the launch's platform
|
|
69585
71595
|
* answer when no controller exists). The strip reads this from the same
|
|
69586
71596
|
* projection as the tabs, so the renderer has one source for "child or
|
|
@@ -69618,6 +71628,7 @@ class BrowserHost {
|
|
|
69618
71628
|
this.tabAudio = new TabAudioTracker(() => this.onChanged());
|
|
69619
71629
|
this.facts = options.facts;
|
|
69620
71630
|
this.forgetSiteData = options.forgetSiteData;
|
|
71631
|
+
this.approvalsCard = options.approvalsCard;
|
|
69621
71632
|
this.addressOverlayMode = options.addressOverlayMode ?? (() => ({ mode: "suspend", reason: "unavailable" }));
|
|
69622
71633
|
this.historyStore = options.historyFilePath ? createBrowserHistoryStore(options.historyFilePath) : null;
|
|
69623
71634
|
}
|
|
@@ -69903,6 +71914,10 @@ class BrowserHost {
|
|
|
69903
71914
|
);
|
|
69904
71915
|
return {
|
|
69905
71916
|
addressOverlay: this.addressOverlayMode(),
|
|
71917
|
+
approvalsCard: this.approvalsCard?.state() ?? {
|
|
71918
|
+
available: false,
|
|
71919
|
+
open: false
|
|
71920
|
+
},
|
|
69906
71921
|
pageControls: this.pageControls.state(active),
|
|
69907
71922
|
tabs: this.chromeTabOrder.project(this.registry.snapshot()).map((entry, displayOrder) => ({
|
|
69908
71923
|
...this.chromeTabOrder.hasCustomOrder ? { displayOrder } : {},
|
|
@@ -70719,6 +72734,42 @@ class BrowserHost {
|
|
|
70719
72734
|
this.onChanged();
|
|
70720
72735
|
return { ...result, ...this.chromeState() };
|
|
70721
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
|
+
}
|
|
70722
72773
|
/** Revoke one origin's approvals (design 9.4). Separate from closing a tab and
|
|
70723
72774
|
* separate from clearing cookies: "stop this agent" and "forget this site" are
|
|
70724
72775
|
* different intentions. */
|
|
@@ -71668,6 +73719,9 @@ const BROWSER_IPC_CHANNELS = [
|
|
|
71668
73719
|
"browser-page-control",
|
|
71669
73720
|
"browser-reopen-tab",
|
|
71670
73721
|
"browser-focus-page",
|
|
73722
|
+
"browser-approvals-card-open",
|
|
73723
|
+
"browser-approvals-card-close",
|
|
73724
|
+
"browser-approvals-card-context",
|
|
71671
73725
|
"browser-new-tab",
|
|
71672
73726
|
"browser-reorder-tabs",
|
|
71673
73727
|
"browser-tab-action",
|
|
@@ -71826,6 +73880,18 @@ function registerBrowserIpc(options) {
|
|
|
71826
73880
|
"browser-reopen-tab",
|
|
71827
73881
|
(event, sessionId2) => authorize(event).reopenClosed(optionalConversationOrThrow(sessionId2))
|
|
71828
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
|
+
});
|
|
71829
73895
|
electron.ipcMain.handle("browser-focus-page", (event) => {
|
|
71830
73896
|
authorize(event);
|
|
71831
73897
|
options.focusPage?.();
|
|
@@ -74483,11 +76549,31 @@ async function initializeBrowserHost(options, bindings) {
|
|
|
74483
76549
|
type: metric.type
|
|
74484
76550
|
}))
|
|
74485
76551
|
}) : null;
|
|
76552
|
+
let respondToConsent = null;
|
|
74486
76553
|
const approvalsOverlay = options.approvalsOverlay?.enabled === true && approvalsOverlayEnabled(process.env) ? new ApprovalsOverlayController({
|
|
74487
76554
|
window: options.window,
|
|
74488
76555
|
documentUrl: options.approvalsOverlay.documentUrl,
|
|
76556
|
+
preloadPath: options.approvalsOverlay.preloadPath,
|
|
74489
76557
|
opaque: process.platform !== "darwin",
|
|
74490
|
-
|
|
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
|
+
)
|
|
74491
76577
|
}) : null;
|
|
74492
76578
|
const sessionStore = new BrowserSessionStore({
|
|
74493
76579
|
dir: path$1.join(options.userDataDir, "browser"),
|
|
@@ -74601,8 +76687,11 @@ async function initializeBrowserHost(options, bindings) {
|
|
|
74601
76687
|
clearTimeout(approvalsExpiryTimer);
|
|
74602
76688
|
approvalsExpiryTimer = null;
|
|
74603
76689
|
}
|
|
74604
|
-
const entries = approvals.pendingEntries()
|
|
74605
|
-
|
|
76690
|
+
const entries = approvals.pendingEntries().map((entry) => ({
|
|
76691
|
+
...entry,
|
|
76692
|
+
requesterSessionId: sessionRequesterOf(entry.requester)
|
|
76693
|
+
}));
|
|
76694
|
+
approvalsOverlay?.setModel({ entries });
|
|
74606
76695
|
if (entries.length === 0) return;
|
|
74607
76696
|
const delay2 = approvalsExpiryDelay(entries);
|
|
74608
76697
|
if (delay2 !== null) {
|
|
@@ -74634,8 +76723,15 @@ async function initializeBrowserHost(options, bindings) {
|
|
|
74634
76723
|
addressOverlayMode: () => addressOverlay ? addressOverlay.mode() : {
|
|
74635
76724
|
mode: "suspend",
|
|
74636
76725
|
reason: options.addressOverlay?.product === true ? "unavailable" : "platform"
|
|
74637
|
-
}
|
|
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
|
|
74638
76733
|
});
|
|
76734
|
+
respondToConsent = (entryId, decision) => host.respondToConsent(entryId, decision);
|
|
74639
76735
|
historyClearer.current = {
|
|
74640
76736
|
clear: () => host.clearHistory(),
|
|
74641
76737
|
clearOrigin: (origin) => host.clearOriginHistory(origin)
|
|
@@ -77928,11 +80024,11 @@ function runInOwnProcessGroup(input) {
|
|
|
77928
80024
|
groupPid = child.pid ?? null;
|
|
77929
80025
|
if (groupPid !== null) input.onSpawn?.(groupPid);
|
|
77930
80026
|
const record = (chunk, stream) => {
|
|
77931
|
-
const
|
|
80027
|
+
const text2 = String(chunk);
|
|
77932
80028
|
if (stream === "stdout") {
|
|
77933
|
-
stdout = (stdout +
|
|
80029
|
+
stdout = (stdout + text2).slice(-4194304);
|
|
77934
80030
|
} else {
|
|
77935
|
-
stderr = (stderr +
|
|
80031
|
+
stderr = (stderr + text2).slice(-4194304);
|
|
77936
80032
|
}
|
|
77937
80033
|
};
|
|
77938
80034
|
child.stdout?.on("data", (chunk) => record(chunk, "stdout"));
|
|
@@ -78064,13 +80160,13 @@ function summariseReleaseBody(body, limit = SUMMARY_LIMIT) {
|
|
|
78064
80160
|
if (typeof body !== "string") return null;
|
|
78065
80161
|
const blocks = body.replace(CRLF, "\n").split(BLANK_LINE);
|
|
78066
80162
|
for (const block of blocks) {
|
|
78067
|
-
const
|
|
78068
|
-
if (
|
|
80163
|
+
const text2 = flattenBlock(block);
|
|
80164
|
+
if (text2 && !isMachineRow(text2)) return truncateSummary(text2, limit);
|
|
78069
80165
|
}
|
|
78070
80166
|
return null;
|
|
78071
80167
|
}
|
|
78072
|
-
function isMachineRow(
|
|
78073
|
-
return PR_HEADLINE.test(
|
|
80168
|
+
function isMachineRow(text2) {
|
|
80169
|
+
return PR_HEADLINE.test(text2) || MERGE_CITATION.test(text2);
|
|
78074
80170
|
}
|
|
78075
80171
|
const CRLF = /\r\n?/g;
|
|
78076
80172
|
const BLANK_LINE = /\n{2,}/;
|
|
@@ -78101,9 +80197,9 @@ function flattenBlock(block) {
|
|
|
78101
80197
|
if (lines.length === 0) return "";
|
|
78102
80198
|
return collapseWhitespace(flattenInline(lines.join(" ")));
|
|
78103
80199
|
}
|
|
78104
|
-
function flattenInline(
|
|
80200
|
+
function flattenInline(text2) {
|
|
78105
80201
|
const code = [];
|
|
78106
|
-
const masked =
|
|
80202
|
+
const masked = text2.replace(MASK_ALPHABET, " ").replace(IMAGE, "$1").replace(LINK, "$1").replace(CODE_SPAN, (_span, inner) => {
|
|
78107
80203
|
code.push(inner);
|
|
78108
80204
|
return `${code.length - 1}`;
|
|
78109
80205
|
});
|
|
@@ -78115,12 +80211,12 @@ function flattenInline(text) {
|
|
|
78115
80211
|
function unwrapEmphasis(_match, triple, strong, italic) {
|
|
78116
80212
|
return triple ?? strong ?? italic ?? "";
|
|
78117
80213
|
}
|
|
78118
|
-
function collapseWhitespace(
|
|
78119
|
-
return
|
|
80214
|
+
function collapseWhitespace(text2) {
|
|
80215
|
+
return text2.replace(WHITESPACE_RUN, " ").trim();
|
|
78120
80216
|
}
|
|
78121
|
-
function truncateSummary(
|
|
78122
|
-
if (
|
|
78123
|
-
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));
|
|
78124
80220
|
const lastSpace = cut.lastIndexOf(" ");
|
|
78125
80221
|
const words = lastSpace > limit / 2 ? cut.slice(0, lastSpace) : cut;
|
|
78126
80222
|
const trimmed = words.trimEnd();
|
|
@@ -78131,16 +80227,16 @@ function truncateSummary(text, limit) {
|
|
|
78131
80227
|
}
|
|
78132
80228
|
const DanglingWord = /(?:^|\s)(?:a|an|as|at|by|in|of|on|or|to)$/i;
|
|
78133
80229
|
const TRAILING_STOP = /[.!?]$/;
|
|
78134
|
-
function stripUnpairedEmphasis(
|
|
78135
|
-
const leading =
|
|
78136
|
-
if (leading && !
|
|
78137
|
-
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();
|
|
78138
80234
|
}
|
|
78139
|
-
const trailing =
|
|
78140
|
-
if (trailing && !
|
|
78141
|
-
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();
|
|
78142
80238
|
}
|
|
78143
|
-
return
|
|
80239
|
+
return text2;
|
|
78144
80240
|
}
|
|
78145
80241
|
function parseReleaseResponse(payload, version) {
|
|
78146
80242
|
if (!payload || typeof payload !== "object" || Array.isArray(payload)) {
|
|
@@ -87603,7 +89699,11 @@ electron.app.whenReady().then(async () => {
|
|
|
87603
89699
|
...approvalsOverlayS6a && approvalsOverlayDocumentUrl ? {
|
|
87604
89700
|
approvalsOverlay: {
|
|
87605
89701
|
enabled: true,
|
|
87606
|
-
documentUrl: approvalsOverlayDocumentUrl
|
|
89702
|
+
documentUrl: approvalsOverlayDocumentUrl,
|
|
89703
|
+
preloadPath: path$1.join(
|
|
89704
|
+
__dirname,
|
|
89705
|
+
"../preload/browser-approvals-overlay.js"
|
|
89706
|
+
)
|
|
87607
89707
|
}
|
|
87608
89708
|
} : {},
|
|
87609
89709
|
preloadPath: path$1.join(__dirname, "../preload/index.js"),
|