local-operator-ui 0.39.6 → 0.39.8
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 +405 -30
- package/out/preload/index.js +11 -1
- package/out/renderer/assets/{_basePickBy-CEM-62na.js → _basePickBy-DHPhZCA_.js} +1 -1
- package/out/renderer/assets/{_baseUniq-DKUG2lEn.js → _baseUniq-CEysnucn.js} +1 -1
- package/out/renderer/assets/{agent-details-page-uwmizvcA.js → agent-details-page-B-86aijV.js} +1 -1
- package/out/renderer/assets/{agent-hub-page-DY0hrFjh.js → agent-hub-page-BcE7cjZA.js} +1 -1
- package/out/renderer/assets/{agents-page-B82GhyEm.js → agents-page-CAw2yx4E.js} +3 -3
- package/out/renderer/assets/{arc-CwS59wEx.js → arc-CHzPG6NW.js} +1 -1
- package/out/renderer/assets/{architectureDiagram-IEHRJDOE-CrSOPHPj.js → architectureDiagram-IEHRJDOE-BJ3tht1i.js} +1 -1
- package/out/renderer/assets/{blockDiagram-JOT3LUYC-DOKW2aS1.js → blockDiagram-JOT3LUYC-B99Xv7BZ.js} +1 -1
- package/out/renderer/assets/{book-open-BrVlmR50.js → book-open-DFWmbD9W.js} +1 -1
- package/out/renderer/assets/browser-page-DaXgSgru.js +1 -0
- package/out/renderer/assets/{browser-webauthn-prompt-D4Pmblc_.js → browser-webauthn-prompt-Dw85slb5.js} +1 -1
- package/out/renderer/assets/{building-2-BbJxBV3t.js → building-2-CYyIaJBN.js} +1 -1
- package/out/renderer/assets/{c4Diagram-VJAJSXHY-BNZOSwVL.js → c4Diagram-VJAJSXHY-C1pdKX_l.js} +1 -1
- package/out/renderer/assets/channel-BEYhBY3Q.js +1 -0
- package/out/renderer/assets/{chunk-4BMEZGHF-DatYJ8Pc.js → chunk-4BMEZGHF-C-BgaYzx.js} +1 -1
- package/out/renderer/assets/{chunk-A2AXSNBT-kofNI-nh.js → chunk-A2AXSNBT-DacD51Pw.js} +1 -1
- package/out/renderer/assets/{chunk-AEK57VVT-RG-vyDkt.js → chunk-AEK57VVT-C1LDIbWD.js} +1 -1
- package/out/renderer/assets/{chunk-D6G4REZN-DbgxdXuD.js → chunk-D6G4REZN-zKqzm1Fc.js} +1 -1
- package/out/renderer/assets/{chunk-RZ5BOZE2-Pwbky5G7.js → chunk-RZ5BOZE2-COMOaHrE.js} +1 -1
- package/out/renderer/assets/{chunk-XZIHB7SX-nMQwH5Ev.js → chunk-XZIHB7SX-BvOCuAGM.js} +1 -1
- package/out/renderer/assets/classDiagram-GIVACNV2-Dy5mXAMG.js +1 -0
- package/out/renderer/assets/classDiagram-v2-COTLJTTW-Dy5mXAMG.js +1 -0
- package/out/renderer/assets/clone-ORue-pxx.js +1 -0
- package/out/renderer/assets/{console-mirror-B7HDmLVb.js → console-mirror-c5UE-myF.js} +14 -14
- package/out/renderer/assets/{consoleCapture-wuvuMPlf.js → consoleCapture-DuZA4r4V.js} +1 -1
- package/out/renderer/assets/{conversation-input-sync-DeQTtOSG.js → conversation-input-sync-DnJ8rwD3.js} +4 -4
- package/out/renderer/assets/{dagre-OKDRZEBW-BXF3VqDs.js → dagre-OKDRZEBW-DDIe0sXd.js} +1 -1
- package/out/renderer/assets/{diagram-SSKATNLV-C6ZzdCUp.js → diagram-SSKATNLV-DIZoy4ar.js} +1 -1
- package/out/renderer/assets/{diagram-VNBRO52H-ND-gVRs3.js → diagram-VNBRO52H-BmbTUCP7.js} +1 -1
- package/out/renderer/assets/{erDiagram-Q7BY3M3F-DJ8vCpMT.js → erDiagram-Q7BY3M3F-BDuxU-l2.js} +1 -1
- package/out/renderer/assets/{error-boundary-D81PAlVn.js → error-boundary-DtxCuvus.js} +1 -1
- package/out/renderer/assets/{flowDiagram-4HSFHLVR-C0lG2NYg.js → flowDiagram-4HSFHLVR-DZD7CEMt.js} +1 -1
- package/out/renderer/assets/{ganttDiagram-APWFNJXF-BBxt5Pgj.js → ganttDiagram-APWFNJXF-sIzmsZR9.js} +1 -1
- package/out/renderer/assets/{gitGraphDiagram-7IBYFJ6S-B5eei6E_.js → gitGraphDiagram-7IBYFJ6S-CfsigYLP.js} +1 -1
- package/out/renderer/assets/{graph-lWFNtwh7.js → graph-Cd4rdBHc.js} +1 -1
- package/out/renderer/assets/{hash-3k6_lTgk.js → hash-g37EdE9w.js} +1 -1
- package/out/renderer/assets/index-1TUQWJ6R.js +57 -0
- package/out/renderer/assets/{index-tyh1i-0R.js → index-A6KCjnE7.js} +1 -1
- package/out/renderer/assets/{index-BtI7uak5.js → index-B8F8dXxx.js} +194 -194
- package/out/renderer/assets/{index-ZC-NNW64.css → index-CXsn7x-M.css} +1 -1
- package/out/renderer/assets/{index-FqHXqlQT.js → index-DEpDOZ5B.js} +1 -1
- package/out/renderer/assets/{infoDiagram-PH2N3AL5-DfdIGj2q.js → infoDiagram-PH2N3AL5-4mNxt66m.js} +1 -1
- package/out/renderer/assets/{installer-OLhNHLbA.js → installer-p8L5oHJJ.js} +1 -1
- package/out/renderer/assets/{journeyDiagram-U35MCT3I-DY36aDPm.js → journeyDiagram-U35MCT3I-CHFBk0nL.js} +1 -1
- package/out/renderer/assets/{kanban-definition-NDS4AKOZ-DkmkP4pt.js → kanban-definition-NDS4AKOZ-COmnjqTV.js} +1 -1
- package/out/renderer/assets/{layout-Wh_eVbud.js → layout-CuSBEVFA.js} +1 -1
- package/out/renderer/assets/{legacy-agents-page-m5-4VKbu.js → legacy-agents-page-DQvyD51p.js} +1 -1
- package/out/renderer/assets/{library-page-vUP7gWsI.js → library-page-B9lgNg45.js} +3 -3
- package/out/renderer/assets/{mermaid.core-CIUeSke9.js → mermaid.core-CewojVRF.js} +5 -5
- package/out/renderer/assets/{mesh-page-CoUCZ19i.js → mesh-page-BhbouWc4.js} +1 -1
- package/out/renderer/assets/{mindmap-definition-ALO5MXBD-E7Cl2drf.js → mindmap-definition-ALO5MXBD-DwFas2ix.js} +1 -1
- package/out/renderer/assets/{mini-D6HdkQvd.js → mini-D0hYsF4Y.js} +1 -1
- package/out/renderer/assets/{notebook-pen-CiUgTpp-.js → notebook-pen-CG3SG58i.js} +1 -1
- package/out/renderer/assets/{org-access-DMUk8SEr.js → org-access-Bdty9bY1.js} +1 -1
- package/out/renderer/assets/{org-surface-gate-DdKUA8S8.js → org-surface-gate-D6nrFZGY.js} +1 -1
- package/out/renderer/assets/{page-header-DyRHEB-L.js → page-header-DysvpDyJ.js} +1 -1
- package/out/renderer/assets/{pieDiagram-IB7DONF6-C3KFzuOU.js → pieDiagram-IB7DONF6-Dq6TjFed.js} +1 -1
- package/out/renderer/assets/{projects-page-BdU99VZf.js → projects-page-Dwk8fTRp.js} +1 -1
- package/out/renderer/assets/{publication-validation-Cv6lnH83.js → publication-validation-BHs0kne8.js} +1 -1
- package/out/renderer/assets/{quadrantDiagram-7GDLP6J5-DommBk0z.js → quadrantDiagram-7GDLP6J5-BVLv2vHo.js} +1 -1
- package/out/renderer/assets/{radar-MK3ICKWK-D5VUcmjY.js → radar-MK3ICKWK-D_oonYMe.js} +1 -1
- package/out/renderer/assets/{radient-auth-buttons-BXc5xVU7.js → radient-auth-buttons-frGm4bTw.js} +1 -1
- package/out/renderer/assets/{requirementDiagram-KVF5MWMF-RSR1-rSs.js → requirementDiagram-KVF5MWMF-fxCXjqlC.js} +1 -1
- package/out/renderer/assets/{sankeyDiagram-QLVOVGJD-Caojpkpm.js → sankeyDiagram-QLVOVGJD-DnTFr800.js} +1 -1
- package/out/renderer/assets/{schedules-page-BWM0NUo9.js → schedules-page-CmHgL3u3.js} +1 -1
- package/out/renderer/assets/{sequenceDiagram-X6HHIX6F-CrZCUpMQ.js → sequenceDiagram-X6HHIX6F-B8wkqfL8.js} +1 -1
- package/out/renderer/assets/settings-page-jrapatoZ.js +287 -0
- package/out/renderer/assets/{smartart-BJStpUh7.js → smartart-CcbzfE85.js} +1 -1
- package/out/renderer/assets/{stateDiagram-DGXRK772-PFp2Dzsd.js → stateDiagram-DGXRK772-pBreQo8f.js} +1 -1
- package/out/renderer/assets/stateDiagram-v2-YXO3MK2T-BQCYRzUG.js +1 -0
- package/out/renderer/assets/{team-bridge-page-pZkYpCnA.js → team-bridge-page-BclyCGPd.js} +1 -1
- package/out/renderer/assets/{timeline-definition-BDJGKUSR-BI2T4N_q.js → timeline-definition-BDJGKUSR-Bh7YlHts.js} +1 -1
- package/out/renderer/assets/ui-preferences-store-B55tTIxk.js +1 -0
- package/out/renderer/assets/{use-download-agent-mutation-B3ghS441.js → use-download-agent-mutation-thVr_RZe.js} +1 -1
- package/out/renderer/assets/{use-session-snapshot-BbulmIXL.js → use-session-snapshot-Dkz_K7sg.js} +1 -1
- package/out/renderer/assets/{xychartDiagram-VJFVF3MP-CuNt7ik-.js → xychartDiagram-VJFVF3MP-DxmxrN_J.js} +1 -1
- package/out/renderer/console-capture.html +5 -5
- package/out/renderer/index.html +7 -7
- package/out/renderer/installer.html +4 -4
- package/out/renderer/mini.html +7 -7
- package/package.json +1 -1
- package/out/renderer/assets/browser-page-kxT2NYqz.js +0 -1
- package/out/renderer/assets/channel-D2-Cirxc.js +0 -1
- package/out/renderer/assets/classDiagram-GIVACNV2-D1u4IPED.js +0 -1
- package/out/renderer/assets/classDiagram-v2-COTLJTTW-D1u4IPED.js +0 -1
- package/out/renderer/assets/clone-D45gbF22.js +0 -1
- package/out/renderer/assets/index-DsY6xpO9.js +0 -57
- package/out/renderer/assets/settings-page-sXBnyGof.js +0 -287
- package/out/renderer/assets/stateDiagram-v2-YXO3MK2T-DhzpDrem.js +0 -1
- package/out/renderer/assets/ui-preferences-store-BZs48Tq1.js +0 -1
package/out/main/index.js
CHANGED
|
@@ -81,6 +81,15 @@ const agentMessagesRefusalSchema = zod.z.object({
|
|
|
81
81
|
details: zod.z.record(zod.z.unknown()).optional(),
|
|
82
82
|
retry_after_seconds: zod.z.number().optional()
|
|
83
83
|
}).passthrough();
|
|
84
|
+
const agentMessagesDeliveryHoldSchema = zod.z.object({
|
|
85
|
+
code: zod.z.string().min(1),
|
|
86
|
+
count: zod.z.number().int().nonnegative(),
|
|
87
|
+
/*
|
|
88
|
+
* Its own `.catch` (review R1-2): a bad session id degrades only the
|
|
89
|
+
* "Message chief of staff" target, never the count the owner must see.
|
|
90
|
+
*/
|
|
91
|
+
session: zod.z.string().min(1).nullable().optional().catch(null)
|
|
92
|
+
}).passthrough().nullable().optional().catch(null);
|
|
84
93
|
zod.z.object({
|
|
85
94
|
capability: zod.z.number(),
|
|
86
95
|
// Missing on frozen H1: absence forbids consent writes, not status reads.
|
|
@@ -119,7 +128,8 @@ zod.z.object({
|
|
|
119
128
|
// F's posture: the server admits only safety-increasing edits. The
|
|
120
129
|
// section gates the reach editor's controls rather than letting a reader
|
|
121
130
|
// press a Save the server will refuse.
|
|
122
|
-
read_only: zod.z.boolean().optional()
|
|
131
|
+
read_only: zod.z.boolean().optional(),
|
|
132
|
+
delivery_hold: agentMessagesDeliveryHoldSchema
|
|
123
133
|
}).passthrough();
|
|
124
134
|
const consentRecordSchema = zod.z.object({
|
|
125
135
|
version: zod.z.string().min(1),
|
|
@@ -24765,7 +24775,7 @@ function consoleCompletionHooks(deps) {
|
|
|
24765
24775
|
const state2 = deps.host()?.state();
|
|
24766
24776
|
return state2?.displayed_surface === surface;
|
|
24767
24777
|
};
|
|
24768
|
-
const completionFor = (surface, exitCode, key) => {
|
|
24778
|
+
const completionFor = (surface, exitCode, key, exitSignal = null) => {
|
|
24769
24779
|
const described = describe2(surface);
|
|
24770
24780
|
if (!described) return null;
|
|
24771
24781
|
return {
|
|
@@ -24773,6 +24783,7 @@ function consoleCompletionHooks(deps) {
|
|
|
24773
24783
|
surface,
|
|
24774
24784
|
surfaceName: described.command,
|
|
24775
24785
|
exitCode,
|
|
24786
|
+
exitSignal,
|
|
24776
24787
|
displayed: displayed(surface),
|
|
24777
24788
|
key
|
|
24778
24789
|
};
|
|
@@ -24826,7 +24837,8 @@ function consoleCompletionHooks(deps) {
|
|
|
24826
24837
|
*/
|
|
24827
24838
|
onExit: ({
|
|
24828
24839
|
surface,
|
|
24829
|
-
exitCode
|
|
24840
|
+
exitCode,
|
|
24841
|
+
exitSignal
|
|
24830
24842
|
}) => {
|
|
24831
24843
|
const key = exitKey(surface);
|
|
24832
24844
|
const previous = lastBanner.get(surface);
|
|
@@ -24836,7 +24848,7 @@ function consoleCompletionHooks(deps) {
|
|
|
24836
24848
|
);
|
|
24837
24849
|
return;
|
|
24838
24850
|
}
|
|
24839
|
-
const notice = completionFor(surface, exitCode, key);
|
|
24851
|
+
const notice = completionFor(surface, exitCode, key, exitSignal ?? null);
|
|
24840
24852
|
if (notice) announce(notice, "exit");
|
|
24841
24853
|
}
|
|
24842
24854
|
};
|
|
@@ -25426,6 +25438,7 @@ class ConsoleRegistry {
|
|
|
25426
25438
|
rows: input.rows,
|
|
25427
25439
|
running: input.live !== false,
|
|
25428
25440
|
exitCode: null,
|
|
25441
|
+
exitSignal: null,
|
|
25429
25442
|
lastActivity: this.now(),
|
|
25430
25443
|
live: input.live !== false,
|
|
25431
25444
|
retain: input.retain,
|
|
@@ -25549,6 +25562,18 @@ const PERSIST_FLUSH_MS = 250;
|
|
|
25549
25562
|
const PERSIST_FLUSH_BYTES = 256 * 1024;
|
|
25550
25563
|
const FRAME_RETRY_DELAY_MS = 120;
|
|
25551
25564
|
const CLOSE_GRACE_MS = 1500;
|
|
25565
|
+
const QUIT_EXIT_CAPTURE_MS = 400;
|
|
25566
|
+
function signalName(signal) {
|
|
25567
|
+
if (typeof signal === "string") {
|
|
25568
|
+
if (signal.length === 0) return null;
|
|
25569
|
+
return signal.startsWith("SIG") ? signal : `SIG${signal}`;
|
|
25570
|
+
}
|
|
25571
|
+
if (typeof signal !== "number" || signal <= 0) return null;
|
|
25572
|
+
for (const [name, number] of Object.entries(os.constants.signals))
|
|
25573
|
+
if (number === signal) return name;
|
|
25574
|
+
return `SIG${signal}`;
|
|
25575
|
+
}
|
|
25576
|
+
const QUIT_SIGNAL_GRACE_MS = 900;
|
|
25552
25577
|
const SURFACE_ENV_MARKER = "LOCAL_OPERATOR_CONSOLE_SURFACE";
|
|
25553
25578
|
const SESSION_ENV_MARKER = "LOCAL_OPERATOR_CONSOLE_SESSION";
|
|
25554
25579
|
const SURFACE_TERM = "xterm-256color";
|
|
@@ -25624,6 +25649,12 @@ class ConsoleHost {
|
|
|
25624
25649
|
* removes the record rather than leaving a surface that lists as running.
|
|
25625
25650
|
*/
|
|
25626
25651
|
create(options) {
|
|
25652
|
+
if (this.disposing)
|
|
25653
|
+
throw new ConsoleError(
|
|
25654
|
+
"console_unavailable",
|
|
25655
|
+
"The console host is shutting down",
|
|
25656
|
+
{ reason: "host_disposing" }
|
|
25657
|
+
);
|
|
25627
25658
|
if (this.failedAllocations.size)
|
|
25628
25659
|
throw new ConsoleError(
|
|
25629
25660
|
"console_unavailable",
|
|
@@ -25708,7 +25739,9 @@ class ConsoleHost {
|
|
|
25708
25739
|
};
|
|
25709
25740
|
this.registry.attach(surface, runtime);
|
|
25710
25741
|
pty.onData((data) => this.consume(surface, data));
|
|
25711
|
-
pty.onExit(
|
|
25742
|
+
pty.onExit(
|
|
25743
|
+
(event) => this.exited(surface, event.exitCode, signalName(event.signal))
|
|
25744
|
+
);
|
|
25712
25745
|
if (options.input) pty.write(options.input);
|
|
25713
25746
|
if (entry.record.retain) this.flush(surface);
|
|
25714
25747
|
this.options.log(
|
|
@@ -25810,10 +25843,13 @@ class ConsoleHost {
|
|
|
25810
25843
|
meta.surface,
|
|
25811
25844
|
Number.isFinite(meta.exit_epoch) ? meta.exit_epoch : 0
|
|
25812
25845
|
);
|
|
25846
|
+
if (meta.end_reason === "app_quit")
|
|
25847
|
+
this.endReasons.set(meta.surface, "app_quit");
|
|
25813
25848
|
if (!existing)
|
|
25814
25849
|
this.registry.update(meta.surface, {
|
|
25815
25850
|
running: false,
|
|
25816
25851
|
exitCode: meta.exit_code,
|
|
25852
|
+
exitSignal: meta.exit_signal,
|
|
25817
25853
|
live: false,
|
|
25818
25854
|
secure: meta.secure === true,
|
|
25819
25855
|
lastActivity: meta.last_seen_at
|
|
@@ -25872,6 +25908,7 @@ class ConsoleHost {
|
|
|
25872
25908
|
this.registry.update(entry.record.surface, {
|
|
25873
25909
|
running: false,
|
|
25874
25910
|
exitCode: meta.exit_code,
|
|
25911
|
+
exitSignal: meta.exit_signal,
|
|
25875
25912
|
live: false,
|
|
25876
25913
|
lastActivity: meta.last_seen_at
|
|
25877
25914
|
});
|
|
@@ -25913,6 +25950,12 @@ class ConsoleHost {
|
|
|
25913
25950
|
rows: record.rows,
|
|
25914
25951
|
running: record.running,
|
|
25915
25952
|
exit_code: record.exitCode,
|
|
25953
|
+
exit_signal: record.exitSignal,
|
|
25954
|
+
/* Why the end happened when no code was observable (§7.3). Only the quit
|
|
25955
|
+
* path writes one, and it is the difference between "nobody could have
|
|
25956
|
+
* seen this" and main's old silence, which the pane read as an unknown
|
|
25957
|
+
* status. */
|
|
25958
|
+
end_reason: this.endReasons.get(record.surface) ?? null,
|
|
25916
25959
|
last_activity: record.lastActivity,
|
|
25917
25960
|
live: record.live,
|
|
25918
25961
|
agent_owned: record.origin === "agent",
|
|
@@ -25947,6 +25990,8 @@ class ConsoleHost {
|
|
|
25947
25990
|
return {
|
|
25948
25991
|
running: entry.record.running,
|
|
25949
25992
|
exit_code: entry.record.exitCode,
|
|
25993
|
+
exit_signal: entry.record.exitSignal,
|
|
25994
|
+
end_reason: this.endReasons.get(surface) ?? null,
|
|
25950
25995
|
// The retention layer's counter, bumped once per `process_exited` (§7.3,
|
|
25951
25996
|
// §10.2). Read from the host's live view of it: the sidecar is what makes
|
|
25952
25997
|
// it survive a relaunch, and this is what the running process reports.
|
|
@@ -26430,14 +26475,16 @@ class ConsoleHost {
|
|
|
26430
26475
|
}, OUTPUT_COALESCE_MS);
|
|
26431
26476
|
runtime.pendingTimer.unref?.();
|
|
26432
26477
|
}
|
|
26433
|
-
exited(surface, exitCode) {
|
|
26478
|
+
exited(surface, exitCode, exitSignal = null) {
|
|
26434
26479
|
const entry = this.registry.find(surface);
|
|
26435
26480
|
if (!entry || !entry.runtime) return;
|
|
26436
26481
|
this.registry.update(surface, {
|
|
26437
26482
|
running: false,
|
|
26438
26483
|
exitCode,
|
|
26484
|
+
exitSignal,
|
|
26439
26485
|
lastActivity: this.now()
|
|
26440
26486
|
});
|
|
26487
|
+
this.endReasons.delete(surface);
|
|
26441
26488
|
this.bumpExitEpoch(entry);
|
|
26442
26489
|
if (entry.record.retain) this.flush(surface);
|
|
26443
26490
|
const runtime = entry.runtime;
|
|
@@ -26446,18 +26493,20 @@ class ConsoleHost {
|
|
|
26446
26493
|
if (!runtime.exitDelivered) {
|
|
26447
26494
|
runtime.exitDelivered = true;
|
|
26448
26495
|
for (const subscriber of runtime.subscribers) {
|
|
26449
|
-
subscriber.exit({ surface, exitCode });
|
|
26496
|
+
subscriber.exit({ surface, exitCode, exitSignal });
|
|
26450
26497
|
}
|
|
26451
26498
|
}
|
|
26452
26499
|
this.options.log(
|
|
26453
|
-
`[console] surface ${redactSurface(surface)} exited ${exitCode}`
|
|
26500
|
+
`[console] surface ${redactSurface(surface)} exited ${exitCode}${exitSignal === null ? "" : ` by ${exitSignal}`}`
|
|
26454
26501
|
);
|
|
26455
26502
|
this.options.onChanged?.();
|
|
26456
|
-
this.
|
|
26457
|
-
|
|
26458
|
-
|
|
26459
|
-
|
|
26460
|
-
|
|
26503
|
+
if (!this.disposing)
|
|
26504
|
+
this.options.onExit?.({
|
|
26505
|
+
surface,
|
|
26506
|
+
sessionId: entry.record.sessionId,
|
|
26507
|
+
exitCode,
|
|
26508
|
+
exitSignal
|
|
26509
|
+
});
|
|
26461
26510
|
void runtime.emulator.whenIdle().then(() => {
|
|
26462
26511
|
const current = this.registry.find(surface);
|
|
26463
26512
|
if (!current || current.runtime !== runtime || current.record.running || !current.record.retain || current.record.secure || current.runtime.subscribers.size || surface === this.displayed || !this.options.history)
|
|
@@ -26812,6 +26861,8 @@ class ConsoleHost {
|
|
|
26812
26861
|
created_at: this.createdAt.get(surface) ?? this.now(),
|
|
26813
26862
|
last_seen_at: record.lastActivity,
|
|
26814
26863
|
exit_code: record.exitCode,
|
|
26864
|
+
exit_signal: record.exitSignal,
|
|
26865
|
+
end_reason: this.endReasons.get(surface) ?? null,
|
|
26815
26866
|
truncated: runtime.log.truncated,
|
|
26816
26867
|
exit_epoch: this.exitEpoch.get(surface) ?? 0,
|
|
26817
26868
|
secure: record.secure,
|
|
@@ -26926,10 +26977,62 @@ class ConsoleHost {
|
|
|
26926
26977
|
this.persistedBytes.delete(surface);
|
|
26927
26978
|
this.metaSignatures.delete(surface);
|
|
26928
26979
|
this.exitEpoch.delete(surface);
|
|
26980
|
+
this.endReasons.delete(surface);
|
|
26929
26981
|
this.options.onChanged?.();
|
|
26930
26982
|
}
|
|
26983
|
+
/**
|
|
26984
|
+
* Let the quit path OBSERVE a surface's exit instead of killing it blind (§7.3).
|
|
26985
|
+
*
|
|
26986
|
+
* THE DEFECT THIS CLOSES: `dispose` used to persist the sidecar (with
|
|
26987
|
+
* `exit_code: null`) and then kill the pty, so the next launch restored "exit
|
|
26988
|
+
* code not observed" for a surface the app itself closed — a status the app
|
|
26989
|
+
* could have had, reported as one nobody could have. The order is now flush,
|
|
26990
|
+
* signal, wait, and let the exit land in the record before the final persist.
|
|
26991
|
+
*
|
|
26992
|
+
* BOUNDED TWICE, AND IN PARALLEL ACROSS SURFACES (`dispose` awaits them all at
|
|
26993
|
+
* once): SIGTERM gets the same grace a user-initiated close does, SIGKILL gets
|
|
26994
|
+
* `QUIT_EXIT_CAPTURE_MS` for the event loop to deliver its `onExit`, and only
|
|
26995
|
+
* after BOTH fail is the end recorded as `app_quit` — the honest sentence for a
|
|
26996
|
+
* status that genuinely could not be observed, and distinguishable from a legacy
|
|
26997
|
+
* sidecar that never looked.
|
|
26998
|
+
*/
|
|
26999
|
+
async settleOnQuit(entry, persistHistory) {
|
|
27000
|
+
const runtime = entry.runtime;
|
|
27001
|
+
if (!runtime || !entry.record.running || !runtime.pty) return;
|
|
27002
|
+
if (persistHistory && entry.record.retain) this.persist(entry, runtime);
|
|
27003
|
+
const pty = runtime.pty;
|
|
27004
|
+
const exit = new Promise((resolve) => {
|
|
27005
|
+
runtime.exitWaiters.push(resolve);
|
|
27006
|
+
});
|
|
27007
|
+
let signalled = true;
|
|
27008
|
+
try {
|
|
27009
|
+
pty.kill();
|
|
27010
|
+
} catch {
|
|
27011
|
+
signalled = false;
|
|
27012
|
+
}
|
|
27013
|
+
const observed = await Promise.race([
|
|
27014
|
+
exit,
|
|
27015
|
+
delay(QUIT_SIGNAL_GRACE_MS).then(() => null)
|
|
27016
|
+
]);
|
|
27017
|
+
if (observed !== null) return;
|
|
27018
|
+
try {
|
|
27019
|
+
pty.kill("SIGKILL");
|
|
27020
|
+
} catch {
|
|
27021
|
+
}
|
|
27022
|
+
const killed = await Promise.race([
|
|
27023
|
+
exit,
|
|
27024
|
+
delay(QUIT_EXIT_CAPTURE_MS).then(() => null)
|
|
27025
|
+
]);
|
|
27026
|
+
if (killed === null) {
|
|
27027
|
+
this.endReasons.set(entry.record.surface, "app_quit");
|
|
27028
|
+
this.options.log(
|
|
27029
|
+
`[console] surface ${redactSurface(entry.record.surface)} did not report an exit within the quit bound${signalled ? "" : " (the signal itself was refused)"}; recording app_quit`
|
|
27030
|
+
);
|
|
27031
|
+
}
|
|
27032
|
+
}
|
|
26931
27033
|
/** Stop everything: every pty, every record, every subscriber. */
|
|
26932
|
-
dispose(persistHistory = true) {
|
|
27034
|
+
async dispose(persistHistory = true) {
|
|
27035
|
+
this.disposing = true;
|
|
26933
27036
|
const allocationFailures = [...this.failedAllocations].flatMap(
|
|
26934
27037
|
(allocation) => this.releaseFailedAllocation(allocation)
|
|
26935
27038
|
);
|
|
@@ -26980,21 +27083,31 @@ class ConsoleHost {
|
|
|
26980
27083
|
failures,
|
|
26981
27084
|
"Partial console runtime cleanup incomplete."
|
|
26982
27085
|
);
|
|
26983
|
-
} else
|
|
26984
|
-
|
|
27086
|
+
} else {
|
|
27087
|
+
const entries = this.registry.list();
|
|
27088
|
+
for (const entry of entries) {
|
|
26985
27089
|
const runtime = entry.runtime;
|
|
26986
27090
|
if (!runtime) continue;
|
|
26987
27091
|
if (runtime.pendingTimer) clearTimeout(runtime.pendingTimer);
|
|
26988
27092
|
if (runtime.persistTimer) clearTimeout(runtime.persistTimer);
|
|
26989
27093
|
runtime.subscribers.clear();
|
|
27094
|
+
}
|
|
27095
|
+
await Promise.all(
|
|
27096
|
+
entries.map((entry) => this.settleOnQuit(entry, persistHistory))
|
|
27097
|
+
);
|
|
27098
|
+
for (const entry of entries) {
|
|
27099
|
+
const runtime = entry.runtime;
|
|
27100
|
+
if (!runtime) continue;
|
|
26990
27101
|
if (persistHistory && entry.record.retain) this.persist(entry, runtime);
|
|
26991
|
-
if (entry.record.running) runtime.pty?.kill();
|
|
26992
27102
|
runtime.emulator.dispose();
|
|
26993
27103
|
}
|
|
27104
|
+
this.registry.clear();
|
|
27105
|
+
}
|
|
26994
27106
|
this.createdAt.clear();
|
|
26995
27107
|
this.persistedBytes.clear();
|
|
26996
27108
|
this.metaSignatures.clear();
|
|
26997
27109
|
this.exitEpoch.clear();
|
|
27110
|
+
this.endReasons.clear();
|
|
26998
27111
|
if (allocationFailures.length)
|
|
26999
27112
|
throw new AggregateError(
|
|
27000
27113
|
allocationFailures,
|
|
@@ -27012,10 +27125,23 @@ class ConsoleHost {
|
|
|
27012
27125
|
metaSignatures = /* @__PURE__ */ new Map();
|
|
27013
27126
|
/** Each surface's exit generation, seeded from the sidecar on restore (§7.3). */
|
|
27014
27127
|
exitEpoch = /* @__PURE__ */ new Map();
|
|
27128
|
+
/**
|
|
27129
|
+
* Why a surface's end could not be observed, when the quit path itself ended it.
|
|
27130
|
+
*
|
|
27131
|
+
* A SEPARATE MAP FROM THE RECORD, like `exitEpoch`: the reason has to outlive the
|
|
27132
|
+
* process that owns the record (it is persisted into the sidecar and read back on
|
|
27133
|
+
* the next launch), and it is cleared the moment a real exit is observed so a
|
|
27134
|
+
* subsequent run under the same handle cannot inherit the previous ending.
|
|
27135
|
+
*/
|
|
27136
|
+
endReasons = /* @__PURE__ */ new Map();
|
|
27137
|
+
/** True from the first line of `dispose`; refuses creates and suppresses the
|
|
27138
|
+
* completion seam for the whole teardown (M-1, m-2). */
|
|
27139
|
+
disposing = false;
|
|
27015
27140
|
}
|
|
27016
27141
|
function metaSignature(meta) {
|
|
27017
27142
|
return [
|
|
27018
27143
|
meta.exit_code,
|
|
27144
|
+
meta.end_reason ?? "",
|
|
27019
27145
|
meta.truncated,
|
|
27020
27146
|
meta.cols,
|
|
27021
27147
|
meta.rows,
|
|
@@ -27639,6 +27765,9 @@ class ConsoleHistory {
|
|
|
27639
27765
|
function parseMeta(raw) {
|
|
27640
27766
|
const meta = JSON.parse(raw);
|
|
27641
27767
|
if (typeof meta.exit_epoch !== "number") meta.exit_epoch = 0;
|
|
27768
|
+
if (meta.end_reason !== "app_quit") meta.end_reason = null;
|
|
27769
|
+
if (typeof meta.exit_signal !== "string" || !/^SIG[A-Z0-9]+$/.test(meta.exit_signal))
|
|
27770
|
+
meta.exit_signal = null;
|
|
27642
27771
|
return meta;
|
|
27643
27772
|
}
|
|
27644
27773
|
function enforceModes(path2) {
|
|
@@ -28171,12 +28300,12 @@ async function startConsoleHost(options) {
|
|
|
28171
28300
|
let policyWatcher = null;
|
|
28172
28301
|
let capacityProbe = null;
|
|
28173
28302
|
let rollbackOwners = [];
|
|
28174
|
-
const cleanupStartupOwners = () => {
|
|
28303
|
+
const cleanupStartupOwners = async () => {
|
|
28175
28304
|
const pending = [];
|
|
28176
28305
|
const failures = [];
|
|
28177
28306
|
for (const release of rollbackOwners.splice(0).reverse()) {
|
|
28178
28307
|
try {
|
|
28179
|
-
release();
|
|
28308
|
+
await release();
|
|
28180
28309
|
} catch (error) {
|
|
28181
28310
|
pending.unshift(release);
|
|
28182
28311
|
failures.push(error);
|
|
@@ -28326,13 +28455,13 @@ async function startConsoleHost(options) {
|
|
|
28326
28455
|
capacityProbe?.stop();
|
|
28327
28456
|
unregisterConsoleIpc();
|
|
28328
28457
|
capture?.dispose();
|
|
28329
|
-
readyHost.dispose();
|
|
28458
|
+
await readyHost.dispose();
|
|
28330
28459
|
log2("[console] host stopped");
|
|
28331
28460
|
}
|
|
28332
28461
|
};
|
|
28333
28462
|
} catch (error) {
|
|
28334
28463
|
try {
|
|
28335
|
-
cleanupStartupOwners();
|
|
28464
|
+
await cleanupStartupOwners();
|
|
28336
28465
|
} catch (cleanupError) {
|
|
28337
28466
|
log2(
|
|
28338
28467
|
`[console] partial cleanup retained for stop: ${String(cleanupError)}`
|
|
@@ -28350,7 +28479,7 @@ async function startConsoleHost(options) {
|
|
|
28350
28479
|
policyWatcher?.stop();
|
|
28351
28480
|
capacityProbe?.stop();
|
|
28352
28481
|
unregisterConsoleIpc();
|
|
28353
|
-
cleanupStartupOwners();
|
|
28482
|
+
await cleanupStartupOwners();
|
|
28354
28483
|
}
|
|
28355
28484
|
};
|
|
28356
28485
|
}
|
|
@@ -34959,7 +35088,10 @@ const enUiAgentMessagesSettings = {
|
|
|
34959
35088
|
"ui.agentMessages.settings.allowlist.person_id": "Person ID",
|
|
34960
35089
|
"ui.agentMessages.settings.allowlist.identifier_help_agent": "Enter an agent ID (bep_…)",
|
|
34961
35090
|
"ui.agentMessages.settings.allowlist.identifier_help_person": "Enter a person ID (acc_…)",
|
|
34962
|
-
"ui.agentMessages.settings.error.no_changes": "No settings were changed. Try again to check the current status."
|
|
35091
|
+
"ui.agentMessages.settings.error.no_changes": "No settings were changed. Try again to check the current status.",
|
|
35092
|
+
"ui.agentMessages.settings.hold.chief_of_staff": "{count, plural, one {{count} message is waiting for your chief of staff. Send one message in that conversation to receive it.} other {{count} messages are waiting for your chief of staff. Send one message in that conversation to receive them.}}",
|
|
35093
|
+
"ui.agentMessages.settings.hold.chief_of_staff_unlinked": "{count, plural, one {{count} message is waiting for your chief of staff. Find that conversation in the sidebar and send one message to receive it.} other {{count} messages are waiting for your chief of staff. Find that conversation in the sidebar and send one message to receive them.}}",
|
|
35094
|
+
"ui.agentMessages.settings.hold.open": "Message chief of staff"
|
|
34963
35095
|
};
|
|
34964
35096
|
const enUiAgentsDialogs = {
|
|
34965
35097
|
"ui.agents.dialogs.create.title": "Create new agent",
|
|
@@ -36236,6 +36368,7 @@ const enUiConsole = {
|
|
|
36236
36368
|
"ui.console.empty.detail": "A console runs a program in this conversation's directory and keeps its output, whether or not this pane is open.",
|
|
36237
36369
|
"ui.console.empty.title": "No console in this session",
|
|
36238
36370
|
"ui.console.ended.exit_code": "exit code {code}",
|
|
36371
|
+
"ui.console.ended.exit_signal": "killed by {signal}",
|
|
36239
36372
|
"ui.console.ended.exit_unknown": "exit code not observed",
|
|
36240
36373
|
"ui.console.ended.live": "This terminal has ended",
|
|
36241
36374
|
"ui.console.ended.restored": "This terminal has ended and its history was restored",
|
|
@@ -36256,6 +36389,7 @@ const enUiConsole = {
|
|
|
36256
36389
|
"ui.console.unavailable.title": "The console is not available in this app",
|
|
36257
36390
|
"ui.console.unavailable.unknown.detail": "This window could not reach the console, and did not say why. The app's log carries the reason.",
|
|
36258
36391
|
"ui.console.tab.ended": "ended",
|
|
36392
|
+
"ui.console.tab.exit_code": "exit {code}",
|
|
36259
36393
|
"ui.console.tab.agent_opened": "An agent opened this console",
|
|
36260
36394
|
"ui.console.tab.agent_typed": "An agent has typed into this console",
|
|
36261
36395
|
"ui.console.tab.close_label": "Close {title}, tab {index, number, ::group-off} of {total, number, ::group-off}",
|
|
@@ -36266,7 +36400,11 @@ const enUiConsole = {
|
|
|
36266
36400
|
"ui.console.secure_toggle.start_tooltip": "Secure input: stop recording this terminal",
|
|
36267
36401
|
"ui.console.close.cancel": "Cancel",
|
|
36268
36402
|
"ui.console.terminal.prompt_label": "Terminal input",
|
|
36269
|
-
"ui.console.terminal.too_much_output": "Too much output to announce, navigate to rows manually to read"
|
|
36403
|
+
"ui.console.terminal.too_much_output": "Too much output to announce, navigate to rows manually to read",
|
|
36404
|
+
"ui.console.ended.app_quit": "the app closed it when it quit",
|
|
36405
|
+
"ui.console.ended.marker": "End of history",
|
|
36406
|
+
"ui.console.ended.marker_detail": "This terminal is read-only. Select text to copy it.",
|
|
36407
|
+
"ui.console.ended.input_blocked": "This terminal has ended, so that key was not sent. Open a new console to type again."
|
|
36270
36408
|
};
|
|
36271
36409
|
const enUiHubComments = {
|
|
36272
36410
|
"ui.hub.comments.delete.confirm": "Are you sure you want to delete this comment?",
|
|
@@ -38692,7 +38830,10 @@ const esUiAgentMessagesSettings = {
|
|
|
38692
38830
|
"ui.agentMessages.settings.allowlist.person_id": "ID de la persona",
|
|
38693
38831
|
"ui.agentMessages.settings.allowlist.identifier_help_agent": "Escribe un ID de agente (bep_…)",
|
|
38694
38832
|
"ui.agentMessages.settings.allowlist.identifier_help_person": "Escribe un ID de persona (acc_…)",
|
|
38695
|
-
"ui.agentMessages.settings.error.no_changes": "No se cambió ningún ajuste. Inténtalo de nuevo para comprobar el estado actual."
|
|
38833
|
+
"ui.agentMessages.settings.error.no_changes": "No se cambió ningún ajuste. Inténtalo de nuevo para comprobar el estado actual.",
|
|
38834
|
+
"ui.agentMessages.settings.hold.chief_of_staff": "{count, plural, one {{count} mensaje está esperando a tu jefa de gabinete. Basta con escribirle una vez en su conversación para recibirlo.} many {{count} de mensajes están esperando a tu jefa de gabinete. Basta con escribirle una vez en su conversación para recibirlos.} other {{count} mensajes están esperando a tu jefa de gabinete. Basta con escribirle una vez en su conversación para recibirlos.}}",
|
|
38835
|
+
"ui.agentMessages.settings.hold.chief_of_staff_unlinked": "{count, plural, one {{count} mensaje está esperando a tu jefa de gabinete. Busca su conversación en la barra lateral y escríbele una vez para recibirlo.} many {{count} de mensajes están esperando a tu jefa de gabinete. Busca su conversación en la barra lateral y escríbele una vez para recibirlos.} other {{count} mensajes están esperando a tu jefa de gabinete. Busca su conversación en la barra lateral y escríbele una vez para recibirlos.}}",
|
|
38836
|
+
"ui.agentMessages.settings.hold.open": "Escribir a tu jefa de gabinete"
|
|
38696
38837
|
};
|
|
38697
38838
|
const esUiAgentsDialogs = {
|
|
38698
38839
|
"ui.agents.dialogs.create.title": "Crear un agente",
|
|
@@ -39816,9 +39957,14 @@ const esUiConsole = {
|
|
|
39816
39957
|
"ui.console.create_failed.title": "No se pudo iniciar la consola en esta sesión",
|
|
39817
39958
|
"ui.console.empty.detail": "Una consola ejecuta un programa en la carpeta de esta conversación y conserva su salida, aunque este panel esté cerrado.",
|
|
39818
39959
|
"ui.console.empty.title": "No hay ninguna consola en esta sesión",
|
|
39960
|
+
"ui.console.ended.app_quit": "la app la cerró al salir",
|
|
39819
39961
|
"ui.console.ended.exit_code": "código de salida {code}",
|
|
39962
|
+
"ui.console.ended.exit_signal": "terminada por {signal}",
|
|
39820
39963
|
"ui.console.ended.exit_unknown": "código de salida no observado",
|
|
39964
|
+
"ui.console.ended.input_blocked": "Esta terminal ha finalizado, así que esa tecla no se envió. Abre una nueva consola para volver a escribir.",
|
|
39821
39965
|
"ui.console.ended.live": "Esta terminal ha finalizado",
|
|
39966
|
+
"ui.console.ended.marker": "Fin del historial",
|
|
39967
|
+
"ui.console.ended.marker_detail": "Esta terminal es de solo lectura. Selecciona el texto para copiarlo.",
|
|
39822
39968
|
"ui.console.ended.restored": "Esta terminal ha finalizado y se ha restaurado su historial",
|
|
39823
39969
|
"ui.console.loading.create": "Iniciando una consola",
|
|
39824
39970
|
"ui.console.loading.read": "Leyendo la consola de esta sesión",
|
|
@@ -39837,6 +39983,7 @@ const esUiConsole = {
|
|
|
39837
39983
|
"ui.console.unavailable.title": "La consola no está disponible en esta app",
|
|
39838
39984
|
"ui.console.unavailable.unknown.detail": "Esta ventana no pudo acceder a la consola y no indicó por qué. El registro de la app contiene el motivo.",
|
|
39839
39985
|
"ui.console.tab.ended": "finalizada",
|
|
39986
|
+
"ui.console.tab.exit_code": "código {code}",
|
|
39840
39987
|
"ui.console.tab.agent_opened": "Un agente abrió esta consola",
|
|
39841
39988
|
"ui.console.tab.agent_typed": "Un agente ha escrito en esta consola",
|
|
39842
39989
|
"ui.console.tab.close_label": "Cerrar {title}, pestaña {index, number, ::group-off} de {total, number, ::group-off}",
|
|
@@ -42273,7 +42420,10 @@ const frUiAgentMessagesSettings = {
|
|
|
42273
42420
|
"ui.agentMessages.settings.allowlist.person_id": "ID de la personne",
|
|
42274
42421
|
"ui.agentMessages.settings.allowlist.identifier_help_agent": "Saisissez un ID d’agent (bep_…)",
|
|
42275
42422
|
"ui.agentMessages.settings.allowlist.identifier_help_person": "Saisissez un ID de personne (acc_…)",
|
|
42276
|
-
"ui.agentMessages.settings.error.no_changes": "Aucun paramètre n’a été modifié. Réessayez pour vérifier l’état actuel."
|
|
42423
|
+
"ui.agentMessages.settings.error.no_changes": "Aucun paramètre n’a été modifié. Réessayez pour vérifier l’état actuel.",
|
|
42424
|
+
"ui.agentMessages.settings.hold.chief_of_staff": "{count, plural, one {{count} message attend votre cheffe de cabinet. Envoyez un message dans sa conversation pour le recevoir.} many {{count} de messages attendent votre cheffe de cabinet. Envoyez un message dans sa conversation pour les recevoir.} other {{count} messages attendent votre cheffe de cabinet. Envoyez un message dans sa conversation pour les recevoir.}}",
|
|
42425
|
+
"ui.agentMessages.settings.hold.chief_of_staff_unlinked": "{count, plural, one {{count} message attend votre cheffe de cabinet. Retrouvez sa conversation dans la barre latérale et envoyez-y un message pour le recevoir.} many {{count} de messages attendent votre cheffe de cabinet. Retrouvez sa conversation dans la barre latérale et envoyez-y un message pour les recevoir.} other {{count} messages attendent votre cheffe de cabinet. Retrouvez sa conversation dans la barre latérale et envoyez-y un message pour les recevoir.}}",
|
|
42426
|
+
"ui.agentMessages.settings.hold.open": "Écrire à la cheffe de cabinet"
|
|
42277
42427
|
};
|
|
42278
42428
|
const frUiAgentsDialogs = {
|
|
42279
42429
|
"ui.agents.dialogs.create.title": "Créer un agent",
|
|
@@ -43382,9 +43532,14 @@ const frUiConsole = {
|
|
|
43382
43532
|
"ui.console.create_failed.title": "Impossible de démarrer la console dans cette session",
|
|
43383
43533
|
"ui.console.empty.detail": "Une console exécute un programme dans le dossier de cette conversation et conserve sa sortie, même si ce volet est fermé.",
|
|
43384
43534
|
"ui.console.empty.title": "Aucune console dans cette session",
|
|
43535
|
+
"ui.console.ended.app_quit": "l’application l’a fermé en quittant",
|
|
43385
43536
|
"ui.console.ended.exit_code": "code de sortie {code}",
|
|
43537
|
+
"ui.console.ended.exit_signal": "tué par {signal}",
|
|
43386
43538
|
"ui.console.ended.exit_unknown": "code de sortie non observé",
|
|
43539
|
+
"ui.console.ended.input_blocked": "Ce terminal est terminé : cette touche n’a pas été envoyée. Ouvrez une nouvelle console pour saisir à nouveau.",
|
|
43387
43540
|
"ui.console.ended.live": "Ce terminal est terminé",
|
|
43541
|
+
"ui.console.ended.marker": "Fin de l’historique",
|
|
43542
|
+
"ui.console.ended.marker_detail": "Ce terminal est en lecture seule. Sélectionnez le texte à copier.",
|
|
43388
43543
|
"ui.console.ended.restored": "Ce terminal est terminé, historique restauré",
|
|
43389
43544
|
"ui.console.loading.create": "Démarrage d’une console",
|
|
43390
43545
|
"ui.console.loading.read": "Lecture de la console de cette session",
|
|
@@ -43418,6 +43573,7 @@ const frUiConsole = {
|
|
|
43418
43573
|
"ui.console.dismiss.title": "Effacer ce terminal ?",
|
|
43419
43574
|
"ui.console.dismiss.confirm": "Effacer le terminal",
|
|
43420
43575
|
"ui.console.tab.ended": "terminé",
|
|
43576
|
+
"ui.console.tab.exit_code": "sortie {code}",
|
|
43421
43577
|
"ui.console.tab.agent_opened": "Un agent a ouvert cette console",
|
|
43422
43578
|
"ui.console.tab.agent_typed": "Un agent a saisi du texte dans cette console",
|
|
43423
43579
|
"ui.console.tab.close_label": "Fermer {title}, onglet {index, number, ::group-off} sur {total, number, ::group-off}",
|
|
@@ -45854,7 +46010,10 @@ const hiUiAgentMessagesSettings = {
|
|
|
45854
46010
|
"ui.agentMessages.settings.allowlist.person_id": "व्यक्ति ID",
|
|
45855
46011
|
"ui.agentMessages.settings.allowlist.identifier_help_agent": "एजेंट ID दर्ज करें (bep_…)",
|
|
45856
46012
|
"ui.agentMessages.settings.allowlist.identifier_help_person": "व्यक्ति ID दर्ज करें (acc_…)",
|
|
45857
|
-
"ui.agentMessages.settings.error.no_changes": "कोई सेटिंग नहीं बदली गई। मौजूदा स्थिति जाँचने के लिए फिर कोशिश करें।"
|
|
46013
|
+
"ui.agentMessages.settings.error.no_changes": "कोई सेटिंग नहीं बदली गई। मौजूदा स्थिति जाँचने के लिए फिर कोशिश करें।",
|
|
46014
|
+
"ui.agentMessages.settings.hold.chief_of_staff": "{count, plural, one {आपकी चीफ़ ऑफ़ स्टाफ के लिए {count} संदेश इंतज़ार में है। उसे पाने के लिए उस बातचीत में एक संदेश भेजें।} other {आपकी चीफ़ ऑफ़ स्टाफ के लिए {count} संदेश इंतज़ार में हैं। उन्हें पाने के लिए उस बातचीत में एक संदेश भेजें।}}",
|
|
46015
|
+
"ui.agentMessages.settings.hold.chief_of_staff_unlinked": "{count, plural, one {आपकी चीफ़ ऑफ़ स्टाफ के लिए {count} संदेश इंतज़ार में है। उसे पाने के लिए साइडबार में वह बातचीत खोजें और उसमें एक संदेश भेजें।} other {आपकी चीफ़ ऑफ़ स्टाफ के लिए {count} संदेश इंतज़ार में हैं। उन्हें पाने के लिए साइडबार में वह बातचीत खोजें और उसमें एक संदेश भेजें।}}",
|
|
46016
|
+
"ui.agentMessages.settings.hold.open": "चीफ़ ऑफ़ स्टाफ को संदेश भेजें"
|
|
45858
46017
|
};
|
|
45859
46018
|
const hiUiAgentsDialogs = {
|
|
45860
46019
|
"ui.agents.dialogs.create.title": "नया एजेंट बनाएँ",
|
|
@@ -46947,9 +47106,14 @@ const hiUiConsole = {
|
|
|
46947
47106
|
"ui.console.create_failed.title": "इस सत्र में कंसोल शुरू नहीं हो सका",
|
|
46948
47107
|
"ui.console.empty.detail": "कंसोल इस बातचीत के फ़ोल्डर में प्रोग्राम चलाता है और उसका आउटपुट रखता है, चाहे यह पैनल खुला हो या नहीं।",
|
|
46949
47108
|
"ui.console.empty.title": "इस सत्र में कोई कंसोल नहीं है",
|
|
47109
|
+
"ui.console.ended.app_quit": "ऐप बंद होने पर इसे बंद किया गया",
|
|
46950
47110
|
"ui.console.ended.exit_code": "एग्ज़िट कोड {code}",
|
|
47111
|
+
"ui.console.ended.exit_signal": "{signal} से बंद किया गया",
|
|
46951
47112
|
"ui.console.ended.exit_unknown": "एग्ज़िट कोड उपलब्ध नहीं है",
|
|
47113
|
+
"ui.console.ended.input_blocked": "यह टर्मिनल समाप्त हो चुका है, इसलिए वह कुंजी नहीं भेजी गई। फिर से टाइप करने के लिए नया कंसोल खोलें।",
|
|
46952
47114
|
"ui.console.ended.live": "यह टर्मिनल समाप्त हो चुका है",
|
|
47115
|
+
"ui.console.ended.marker": "इतिहास का अंत",
|
|
47116
|
+
"ui.console.ended.marker_detail": "यह टर्मिनल सिर्फ़ पढ़ने के लिए है। कॉपी करने के लिए टेक्स्ट चुनें।",
|
|
46953
47117
|
"ui.console.ended.restored": "यह टर्मिनल समाप्त हो चुका है और उसका इतिहास बहाल किया गया है",
|
|
46954
47118
|
"ui.console.loading.create": "कंसोल शुरू हो रहा है",
|
|
46955
47119
|
"ui.console.loading.read": "इस सत्र का कंसोल पढ़ा जा रहा है",
|
|
@@ -46968,6 +47132,7 @@ const hiUiConsole = {
|
|
|
46968
47132
|
"ui.console.unavailable.title": "इस ऐप में कंसोल उपलब्ध नहीं है",
|
|
46969
47133
|
"ui.console.unavailable.unknown.detail": "यह विंडो कंसोल से संपर्क नहीं कर सकी और इसकी वजह नहीं बताई। वजह ऐप के लॉग में दी गई है।",
|
|
46970
47134
|
"ui.console.tab.ended": "समाप्त",
|
|
47135
|
+
"ui.console.tab.exit_code": "एग्ज़िट {code}",
|
|
46971
47136
|
"ui.console.tab.agent_opened": "यह कंसोल किसी एजेंट ने खोला था",
|
|
46972
47137
|
"ui.console.tab.agent_typed": "इस कंसोल में किसी एजेंट ने टाइप किया है",
|
|
46973
47138
|
"ui.console.tab.close_label": "{title} बंद करें, टैब {index, number, ::group-off}, कुल {total, number, ::group-off}",
|
|
@@ -49214,6 +49379,95 @@ const ruUiAgentMessages = {
|
|
|
49214
49379
|
"ui.agentMessages.dialog.validation_detail": "{field}: {rule}",
|
|
49215
49380
|
"ui.agentMessages.dialog.validation_failure": "Запрос настройки не принят. Обновите Local Operator и повторите попытку."
|
|
49216
49381
|
};
|
|
49382
|
+
const ruUiAgentMessagesSettings = {
|
|
49383
|
+
"ui.agentMessages.settings.section": "Сообщения агентов",
|
|
49384
|
+
"ui.agentMessages.settings.description": "Ваш агент может обмениваться сообщениями с агентами других участников вашей организации.",
|
|
49385
|
+
"ui.agentMessages.settings.off_by_default": "По умолчанию выключено.",
|
|
49386
|
+
"ui.agentMessages.settings.state.b_title": "Сообщения агентов выключены",
|
|
49387
|
+
"ui.agentMessages.settings.state.b_body": "Включите сообщения агентов, чтобы обмениваться заметками, вопросами и запросами на одобрение с агентами других участников вашей организации.",
|
|
49388
|
+
"ui.agentMessages.settings.state.c_title": "Включено",
|
|
49389
|
+
"ui.agentMessages.settings.state.c_body": "Ваш агент может отправлять сообщения участникам вашей организации и получать сообщения от них.",
|
|
49390
|
+
"ui.agentMessages.settings.state.d_title": "Приостановлено",
|
|
49391
|
+
"ui.agentMessages.settings.state.d_body": "Обмен сообщениями приостановлен в обоих направлениях. Сообщения в очереди сохраняются, а на ожидающие запросы по-прежнему можно ответить. Для возобновления новое согласие не требуется.",
|
|
49392
|
+
"ui.agentMessages.settings.state.e_title": "Отключено",
|
|
49393
|
+
"ui.agentMessages.settings.state.e_body": "Сообщения агентов отключены для этой учётной записи. При повторном включении согласие нужно будет дать заново.",
|
|
49394
|
+
"ui.agentMessages.settings.state.f_title": "Сообщения агентов отключены",
|
|
49395
|
+
"ui.agentMessages.settings.state.f_body": "Ваша организация отключила сообщения агентов. История остаётся доступной для чтения.",
|
|
49396
|
+
"ui.agentMessages.settings.state.turned_off_title": "Сообщения агентов отключены",
|
|
49397
|
+
"ui.agentMessages.settings.state.turned_off_org": "Отключено вашей организацией",
|
|
49398
|
+
"ui.agentMessages.settings.state.read_only": "Эта запись о согласии доступна только для чтения.",
|
|
49399
|
+
"ui.agentMessages.settings.action.enable": "Включить",
|
|
49400
|
+
"ui.agentMessages.settings.action.enable_again": "Включить снова",
|
|
49401
|
+
"ui.agentMessages.settings.action.pause": "Приостановить",
|
|
49402
|
+
"ui.agentMessages.settings.action.resume": "Возобновить",
|
|
49403
|
+
"ui.agentMessages.settings.action.turn_off": "Отключить",
|
|
49404
|
+
"ui.agentMessages.settings.local.label": "Включено на этом компьютере",
|
|
49405
|
+
"ui.agentMessages.settings.local.stays_enrolled": "Ваша регистрация остаётся активной для этой учётной записи и на других ваших компьютерах.",
|
|
49406
|
+
"ui.agentMessages.settings.saving": "Сохранение…",
|
|
49407
|
+
"ui.agentMessages.settings.consent.show": "Прочитать текст согласия",
|
|
49408
|
+
"ui.agentMessages.settings.consent.version": "Версия согласия",
|
|
49409
|
+
"ui.agentMessages.settings.consent.via": "Где получено",
|
|
49410
|
+
"ui.agentMessages.settings.consent.at": "Принято",
|
|
49411
|
+
"ui.agentMessages.settings.consent.via_dialog": "Окно согласия",
|
|
49412
|
+
"ui.agentMessages.settings.consent.via_settings": "Настройки",
|
|
49413
|
+
"ui.agentMessages.settings.consent.no_record": "Для этого endpoint нет записи о согласии.",
|
|
49414
|
+
"ui.agentMessages.settings.consent.renew": "Согласие нужно обновить. Прочитайте актуальный текст и включите снова.",
|
|
49415
|
+
"ui.agentMessages.settings.consent.unavailable": "Согласие недоступно. Сообщения агентов не включены.",
|
|
49416
|
+
"ui.agentMessages.settings.consent.changed": "Прочитайте актуальный текст согласия ниже и включите снова.",
|
|
49417
|
+
"ui.agentMessages.settings.allowlist.title": "Доступ",
|
|
49418
|
+
"ui.agentMessages.settings.allowlist.description": "Выберите, кто может писать вам и кому можете писать вы.",
|
|
49419
|
+
"ui.agentMessages.settings.allowlist.level": "Кто может писать",
|
|
49420
|
+
"ui.agentMessages.settings.allowlist.send": "Кому вы можете писать",
|
|
49421
|
+
"ui.agentMessages.settings.allowlist.receive": "Кто может писать вам",
|
|
49422
|
+
"ui.agentMessages.settings.allowlist.anyone": "Все в моей организации",
|
|
49423
|
+
"ui.agentMessages.settings.allowlist.listed_only": "Только выбранные агенты",
|
|
49424
|
+
"ui.agentMessages.settings.allowlist.cue_listed_only": "Если выбрать «Только выбранные агенты», новые разговоры в этом направлении будут ограничены этим списком.",
|
|
49425
|
+
"ui.agentMessages.settings.allowlist.cue_remove": "Удаление записи не прерывает открытый разговор, а блокировка — прерывает.",
|
|
49426
|
+
"ui.agentMessages.settings.allowlist.cue_deny": "Блокировка действует в обоих направлениях.",
|
|
49427
|
+
"ui.agentMessages.settings.allowlist.allowed_heading": "Разрешённые",
|
|
49428
|
+
"ui.agentMessages.settings.allowlist.allowed_empty": "Пока нет разрешённых агентов или людей.",
|
|
49429
|
+
"ui.agentMessages.settings.allowlist.blocked_heading": "Заблокированные",
|
|
49430
|
+
"ui.agentMessages.settings.allowlist.blocked_empty": "Никто не заблокирован.",
|
|
49431
|
+
"ui.agentMessages.settings.allowlist.add": "Добавить",
|
|
49432
|
+
"ui.agentMessages.settings.allowlist.add_allowed": "Разрешить агента или человека",
|
|
49433
|
+
"ui.agentMessages.settings.allowlist.add_blocked": "Заблокировать агента или человека",
|
|
49434
|
+
"ui.agentMessages.settings.allowlist.kind": "Тип",
|
|
49435
|
+
"ui.agentMessages.settings.allowlist.kind_agent": "Агент",
|
|
49436
|
+
"ui.agentMessages.settings.allowlist.kind_person": "Человек",
|
|
49437
|
+
"ui.agentMessages.settings.allowlist.identifier": "Идентификатор",
|
|
49438
|
+
"ui.agentMessages.settings.allowlist.identifier_empty": "Введите идентификатор.",
|
|
49439
|
+
"ui.agentMessages.settings.allowlist.identifier_long": "Идентификатор может содержать не более 128 символов.",
|
|
49440
|
+
"ui.agentMessages.settings.allowlist.identifier_invalid": "Идентификатор не может содержать пробелы и управляющие символы.",
|
|
49441
|
+
"ui.agentMessages.settings.allowlist.remove": "Удалить",
|
|
49442
|
+
"ui.agentMessages.settings.allowlist.save": "Сохранить настройки доступа",
|
|
49443
|
+
"ui.agentMessages.settings.allowlist.needs_entry": "Добавьте хотя бы одного агента или человека либо выберите «Все в моей организации».",
|
|
49444
|
+
"ui.agentMessages.settings.allowlist.unchanged": "Нет изменений для сохранения.",
|
|
49445
|
+
"ui.agentMessages.settings.session.title": "Сессия для новых сообщений",
|
|
49446
|
+
"ui.agentMessages.settings.session.help": "Сессия, которую можно пробуждать при новых сообщениях; пусто — только значок.",
|
|
49447
|
+
"ui.agentMessages.settings.session.none": "Без сессии — только значок",
|
|
49448
|
+
"ui.agentMessages.settings.session.unavailable": "Эта сессия больше недоступна.",
|
|
49449
|
+
"ui.agentMessages.settings.dark.title": "Пока недоступно",
|
|
49450
|
+
"ui.agentMessages.settings.dark.body": "Сообщения агентов пока недоступны.",
|
|
49451
|
+
"ui.agentMessages.settings.dark.nothing_enabled": "На этом компьютере ничего не включено.",
|
|
49452
|
+
"ui.agentMessages.settings.error.title": "Не удалось загрузить сообщения агентов",
|
|
49453
|
+
"ui.agentMessages.settings.error.retry": "Повторить",
|
|
49454
|
+
"ui.agentMessages.settings.error.unreadable": "Этот компьютер вернул ответ с настройками, который приложение не смогло прочитать.",
|
|
49455
|
+
"ui.agentMessages.settings.refusal.sign_in": "Войдите в Radient, чтобы управлять сообщениями агентов.",
|
|
49456
|
+
"ui.agentMessages.settings.refusal.not_available": "Сообщения агентов недоступны для этой учётной записи.",
|
|
49457
|
+
"ui.agentMessages.settings.refusal.disabled": "Ваша организация отключила сообщения агентов.",
|
|
49458
|
+
"ui.agentMessages.settings.refusal.rate_limited": "Слишком много запросов. Подождите немного и повторите попытку.",
|
|
49459
|
+
"ui.agentMessages.settings.refusal.invalid_request": "Изменение не принято. Проверьте запись и повторите попытку.",
|
|
49460
|
+
"ui.agentMessages.settings.refusal.generic": "Не удалось обновить сообщения агентов. Повторите попытку.",
|
|
49461
|
+
"ui.agentMessages.settings.allowlist.read_only": "Настройки доступа нельзя изменить, пока сообщения агентов отключены.",
|
|
49462
|
+
"ui.agentMessages.settings.allowlist.agent_id": "ID агента",
|
|
49463
|
+
"ui.agentMessages.settings.allowlist.person_id": "ID человека",
|
|
49464
|
+
"ui.agentMessages.settings.allowlist.identifier_help_agent": "Введите ID агента (bep_…)",
|
|
49465
|
+
"ui.agentMessages.settings.allowlist.identifier_help_person": "Введите ID человека (acc_…)",
|
|
49466
|
+
"ui.agentMessages.settings.error.no_changes": "Настройки не изменены. Повторите попытку, чтобы проверить текущее состояние.",
|
|
49467
|
+
"ui.agentMessages.settings.hold.chief_of_staff": "{count, plural, one {{count} сообщение ждёт вашего координатора. Чтобы получить его, отправьте одно сообщение в этом разговоре.} few {{count} сообщения ждут вашего координатора. Чтобы получить их, отправьте одно сообщение в этом разговоре.} many {{count} сообщений ждут вашего координатора. Чтобы получить их, отправьте одно сообщение в этом разговоре.} other {{count} сообщения ждут вашего координатора. Чтобы получить их, отправьте одно сообщение в этом разговоре.}}",
|
|
49468
|
+
"ui.agentMessages.settings.hold.chief_of_staff_unlinked": "{count, plural, one {{count} сообщение ждёт вашего координатора. Чтобы получить его, найдите этот разговор на боковой панели и отправьте в нём одно сообщение.} few {{count} сообщения ждут вашего координатора. Чтобы получить их, найдите этот разговор на боковой панели и отправьте в нём одно сообщение.} many {{count} сообщений ждут вашего координатора. Чтобы получить их, найдите этот разговор на боковой панели и отправьте в нём одно сообщение.} other {{count} сообщения ждут вашего координатора. Чтобы получить их, найдите этот разговор на боковой панели и отправьте в нём одно сообщение.}}",
|
|
49469
|
+
"ui.agentMessages.settings.hold.open": "Написать координатору"
|
|
49470
|
+
};
|
|
49217
49471
|
const ruUiAgentsDialogs = {
|
|
49218
49472
|
"ui.agents.dialogs.clear.cancel": "Отмена",
|
|
49219
49473
|
"ui.agents.dialogs.clear.confirm": "Очистить",
|
|
@@ -50325,9 +50579,14 @@ const ruUiConsole = {
|
|
|
50325
50579
|
"ui.console.create_failed.title": "Не удалось запустить консоль в этой сессии",
|
|
50326
50580
|
"ui.console.empty.detail": "Консоль запускает программу в папке этого разговора и сохраняет её вывод, даже когда эта панель закрыта.",
|
|
50327
50581
|
"ui.console.empty.title": "В этой сессии нет консоли",
|
|
50582
|
+
"ui.console.ended.app_quit": "приложение закрыло его при выходе",
|
|
50328
50583
|
"ui.console.ended.exit_code": "код завершения {code}",
|
|
50584
|
+
"ui.console.ended.exit_signal": "остановлен сигналом {signal}",
|
|
50329
50585
|
"ui.console.ended.exit_unknown": "код завершения не получен",
|
|
50586
|
+
"ui.console.ended.input_blocked": "Этот терминал завершил работу, поэтому нажатие не отправлено. Откройте новую консоль, чтобы снова вводить текст.",
|
|
50330
50587
|
"ui.console.ended.live": "Этот терминал завершил работу",
|
|
50588
|
+
"ui.console.ended.marker": "Конец истории",
|
|
50589
|
+
"ui.console.ended.marker_detail": "Терминал только для чтения. Выделите текст, чтобы скопировать его.",
|
|
50331
50590
|
"ui.console.ended.restored": "Этот терминал завершил работу; его история восстановлена",
|
|
50332
50591
|
"ui.console.loading.create": "Запуск консоли",
|
|
50333
50592
|
"ui.console.loading.read": "Чтение консоли этой сессии",
|
|
@@ -50346,6 +50605,7 @@ const ruUiConsole = {
|
|
|
50346
50605
|
"ui.console.unavailable.title": "Консоль недоступна в этом приложении",
|
|
50347
50606
|
"ui.console.unavailable.unknown.detail": "Это окно не смогло подключиться к консоли и не сообщило причину. Она указана в журнале приложения.",
|
|
50348
50607
|
"ui.console.tab.ended": "завершён",
|
|
50608
|
+
"ui.console.tab.exit_code": "код {code}",
|
|
50349
50609
|
"ui.console.tab.agent_opened": "Агент открыл эту консоль",
|
|
50350
50610
|
"ui.console.tab.agent_typed": "Агент вводил текст в этой консоли",
|
|
50351
50611
|
"ui.console.tab.close_label": "Закрыть {title}, вкладка {index, number, ::group-off} из {total, number, ::group-off}",
|
|
@@ -52676,7 +52936,10 @@ const urUiAgentMessagesSettings = {
|
|
|
52676
52936
|
"ui.agentMessages.settings.allowlist.person_id": "شخص کی ID",
|
|
52677
52937
|
"ui.agentMessages.settings.allowlist.identifier_help_agent": "ایجنٹ ID درج کریں (bep_…)",
|
|
52678
52938
|
"ui.agentMessages.settings.allowlist.identifier_help_person": "شخص کی ID درج کریں (acc_…)",
|
|
52679
|
-
"ui.agentMessages.settings.error.no_changes": "کوئی ترتیب تبدیل نہیں ہوئی۔ موجودہ حالت جانچنے کے لیے دوبارہ کوشش کریں۔"
|
|
52939
|
+
"ui.agentMessages.settings.error.no_changes": "کوئی ترتیب تبدیل نہیں ہوئی۔ موجودہ حالت جانچنے کے لیے دوبارہ کوشش کریں۔",
|
|
52940
|
+
"ui.agentMessages.settings.hold.chief_of_staff": "{count, plural, one {{count} پیغام آپ کی چیف آف اسٹاف کا منتظر ہے۔ اسے وصول کرنے کے لیے اس گفتگو میں ایک پیغام بھیجیں۔} other {{count} پیغامات آپ کی چیف آف اسٹاف کے منتظر ہیں۔ انہیں وصول کرنے کے لیے اس گفتگو میں ایک پیغام بھیجیں۔}}",
|
|
52941
|
+
"ui.agentMessages.settings.hold.chief_of_staff_unlinked": "{count, plural, one {{count} پیغام آپ کی چیف آف اسٹاف کا منتظر ہے۔ اسے وصول کرنے کے لیے سائیڈ بار میں وہ گفتگو تلاش کریں اور اس میں ایک پیغام بھیجیں۔} other {{count} پیغامات آپ کی چیف آف اسٹاف کے منتظر ہیں۔ انہیں وصول کرنے کے لیے سائیڈ بار میں وہ گفتگو تلاش کریں اور اس میں ایک پیغام بھیجیں۔}}",
|
|
52942
|
+
"ui.agentMessages.settings.hold.open": "چیف آف اسٹاف کو پیغام بھیجیں"
|
|
52680
52943
|
};
|
|
52681
52944
|
const urUiAgentsDialogs = {
|
|
52682
52945
|
"ui.agents.dialogs.create.title": "نیا ایجنٹ بنائیں",
|
|
@@ -53789,9 +54052,14 @@ const urUiConsole = {
|
|
|
53789
54052
|
"ui.console.create_failed.title": "اس سیشن میں کنسول شروع نہیں ہو سکا",
|
|
53790
54053
|
"ui.console.empty.detail": "کنسول اس گفتگو کی ڈائریکٹری میں پروگرام چلاتا اور اس کا آؤٹ پٹ محفوظ رکھتا ہے، چاہے یہ پین کھلا ہو یا نہ ہو۔",
|
|
53791
54054
|
"ui.console.empty.title": "اس سیشن میں کوئی کنسول نہیں",
|
|
54055
|
+
"ui.console.ended.app_quit": "ایپ کے بند ہونے پر اسے بند کر دیا گیا",
|
|
53792
54056
|
"ui.console.ended.exit_code": "اخراج کوڈ {code}",
|
|
54057
|
+
"ui.console.ended.exit_signal": "{signal} کے ذریعے ختم کیا گیا",
|
|
53793
54058
|
"ui.console.ended.exit_unknown": "اخراج کوڈ معلوم نہیں ہوا",
|
|
54059
|
+
"ui.console.ended.input_blocked": "یہ ٹرمینل ختم ہو چکا ہے، اس لیے وہ کلید نہیں بھیجی گئی۔ دوبارہ ٹائپ کرنے کے لیے نیا کنسول کھولیں۔",
|
|
53794
54060
|
"ui.console.ended.live": "یہ ٹرمینل ختم ہو چکا ہے",
|
|
54061
|
+
"ui.console.ended.marker": "تاریخچے کا اختتام",
|
|
54062
|
+
"ui.console.ended.marker_detail": "یہ ٹرمینل صرف پڑھنے کے لیے ہے۔ اسے نقل کرنے کے لیے متن منتخب کریں۔",
|
|
53795
54063
|
"ui.console.ended.restored": "یہ ٹرمینل ختم ہو چکا ہے اور اس کا تاریخچہ بحال ہو گیا",
|
|
53796
54064
|
"ui.console.loading.create": "کنسول شروع ہو رہا ہے",
|
|
53797
54065
|
"ui.console.loading.read": "اس سیشن کا کنسول پڑھا جا رہا ہے",
|
|
@@ -53810,6 +54078,7 @@ const urUiConsole = {
|
|
|
53810
54078
|
"ui.console.unavailable.title": "اس ایپ میں کنسول دستیاب نہیں",
|
|
53811
54079
|
"ui.console.unavailable.unknown.detail": "یہ ونڈو کنسول تک نہیں پہنچ سکی، اور وجہ نہیں بتائی۔ وجہ ایپ کے لاگ میں درج ہے۔",
|
|
53812
54080
|
"ui.console.tab.ended": "ختم شدہ",
|
|
54081
|
+
"ui.console.tab.exit_code": "اخراج {code}",
|
|
53813
54082
|
"ui.console.tab.agent_opened": "ایک ایجنٹ نے یہ کنسول کھولا",
|
|
53814
54083
|
"ui.console.tab.agent_typed": "ایک ایجنٹ نے اس کنسول میں ٹائپ کیا ہے",
|
|
53815
54084
|
"ui.console.tab.close_label": "{title} بند کریں، {total, number, ::group-off} میں سے ٹیب {index, number, ::group-off}",
|
|
@@ -56056,6 +56325,95 @@ const viUiAgentMessages = {
|
|
|
56056
56325
|
"ui.agentMessages.dialog.validation_detail": "{field}: {rule}",
|
|
56057
56326
|
"ui.agentMessages.dialog.validation_failure": "Yêu cầu thiết lập này không được chấp nhận. Hãy cập nhật Local Operator rồi thử lại."
|
|
56058
56327
|
};
|
|
56328
|
+
const viUiAgentMessagesSettings = {
|
|
56329
|
+
"ui.agentMessages.settings.section": "Tin nhắn tác nhân",
|
|
56330
|
+
"ui.agentMessages.settings.description": "Tác nhân của bạn có thể trao đổi tin nhắn với tác nhân của các thành viên khác trong tổ chức.",
|
|
56331
|
+
"ui.agentMessages.settings.off_by_default": "Mặc định tắt.",
|
|
56332
|
+
"ui.agentMessages.settings.state.b_title": "Tin nhắn tác nhân đang tắt",
|
|
56333
|
+
"ui.agentMessages.settings.state.b_body": "Bật tin nhắn tác nhân để trao đổi ghi chú, câu hỏi và yêu cầu phê duyệt với tác nhân của các thành viên khác trong tổ chức.",
|
|
56334
|
+
"ui.agentMessages.settings.state.c_title": "Đang bật",
|
|
56335
|
+
"ui.agentMessages.settings.state.c_body": "Tác nhân của bạn có thể gửi và nhận tin nhắn với các thành viên trong tổ chức.",
|
|
56336
|
+
"ui.agentMessages.settings.state.d_title": "Đã tạm dừng",
|
|
56337
|
+
"ui.agentMessages.settings.state.d_body": "Tin nhắn ngừng gửi và nhận ở cả hai chiều. Tin nhắn trong hàng đợi vẫn được giữ và bạn vẫn có thể trả lời các yêu cầu đang chờ. Khi tiếp tục, bạn không cần chấp thuận lại.",
|
|
56338
|
+
"ui.agentMessages.settings.state.e_title": "Đã tắt",
|
|
56339
|
+
"ui.agentMessages.settings.state.e_body": "Tin nhắn tác nhân đang tắt cho tài khoản này. Khi bật lại, một lần chấp thuận mới sẽ được ghi nhận.",
|
|
56340
|
+
"ui.agentMessages.settings.state.f_title": "Tin nhắn tác nhân đã bị tắt",
|
|
56341
|
+
"ui.agentMessages.settings.state.f_body": "Tổ chức của bạn đã tắt tin nhắn tác nhân. Bạn vẫn có thể đọc lịch sử.",
|
|
56342
|
+
"ui.agentMessages.settings.state.turned_off_title": "Tin nhắn tác nhân đã bị tắt",
|
|
56343
|
+
"ui.agentMessages.settings.state.turned_off_org": "Do tổ chức của bạn tắt",
|
|
56344
|
+
"ui.agentMessages.settings.state.read_only": "Hồ sơ chấp thuận này ở chế độ chỉ đọc.",
|
|
56345
|
+
"ui.agentMessages.settings.action.enable": "Bật",
|
|
56346
|
+
"ui.agentMessages.settings.action.enable_again": "Bật lần nữa",
|
|
56347
|
+
"ui.agentMessages.settings.action.pause": "Tạm dừng",
|
|
56348
|
+
"ui.agentMessages.settings.action.resume": "Tiếp tục",
|
|
56349
|
+
"ui.agentMessages.settings.action.turn_off": "Tắt",
|
|
56350
|
+
"ui.agentMessages.settings.local.label": "Đã bật trên máy này",
|
|
56351
|
+
"ui.agentMessages.settings.local.stays_enrolled": "Bạn vẫn tham gia tin nhắn tác nhân trên tài khoản này và các máy khác của bạn.",
|
|
56352
|
+
"ui.agentMessages.settings.saving": "Đang lưu…",
|
|
56353
|
+
"ui.agentMessages.settings.consent.show": "Đọc nội dung chấp thuận",
|
|
56354
|
+
"ui.agentMessages.settings.consent.version": "Phiên bản chấp thuận",
|
|
56355
|
+
"ui.agentMessages.settings.consent.via": "Ghi nhận qua",
|
|
56356
|
+
"ui.agentMessages.settings.consent.at": "Chấp thuận lúc",
|
|
56357
|
+
"ui.agentMessages.settings.consent.via_dialog": "Hộp thoại làm quen",
|
|
56358
|
+
"ui.agentMessages.settings.consent.via_settings": "Cài đặt",
|
|
56359
|
+
"ui.agentMessages.settings.consent.no_record": "Endpoint này chưa có hồ sơ chấp thuận.",
|
|
56360
|
+
"ui.agentMessages.settings.consent.renew": "Cần chấp thuận lại. Đọc nội dung hiện tại rồi chọn Bật lần nữa.",
|
|
56361
|
+
"ui.agentMessages.settings.consent.unavailable": "Chưa có nội dung chấp thuận. Tin nhắn tác nhân chưa được bật.",
|
|
56362
|
+
"ui.agentMessages.settings.consent.changed": "Đọc nội dung chấp thuận hiện tại bên dưới, rồi chọn Bật lần nữa.",
|
|
56363
|
+
"ui.agentMessages.settings.allowlist.title": "Phạm vi liên lạc",
|
|
56364
|
+
"ui.agentMessages.settings.allowlist.description": "Chọn ai có thể nhắn tin cho bạn và bạn có thể nhắn tin cho ai.",
|
|
56365
|
+
"ui.agentMessages.settings.allowlist.level": "Ai được nhắn tin",
|
|
56366
|
+
"ui.agentMessages.settings.allowlist.send": "Bạn có thể nhắn cho ai",
|
|
56367
|
+
"ui.agentMessages.settings.allowlist.receive": "Ai có thể nhắn cho bạn",
|
|
56368
|
+
"ui.agentMessages.settings.allowlist.anyone": "Mọi người trong tổ chức của tôi",
|
|
56369
|
+
"ui.agentMessages.settings.allowlist.listed_only": "Chỉ tác nhân tôi chọn",
|
|
56370
|
+
"ui.agentMessages.settings.allowlist.cue_listed_only": "Chọn “Chỉ tác nhân tôi chọn” sẽ giới hạn các cuộc trò chuyện mới theo chiều đó trong danh sách này.",
|
|
56371
|
+
"ui.agentMessages.settings.allowlist.cue_remove": "Xóa một mục không dừng cuộc trò chuyện đang mở. Chặn thì có.",
|
|
56372
|
+
"ui.agentMessages.settings.allowlist.cue_deny": "Chặn có hiệu lực ở cả hai chiều.",
|
|
56373
|
+
"ui.agentMessages.settings.allowlist.allowed_heading": "Đã cho phép",
|
|
56374
|
+
"ui.agentMessages.settings.allowlist.allowed_empty": "Chưa cho phép tác nhân hay người dùng nào.",
|
|
56375
|
+
"ui.agentMessages.settings.allowlist.blocked_heading": "Đã chặn",
|
|
56376
|
+
"ui.agentMessages.settings.allowlist.blocked_empty": "Chưa chặn ai.",
|
|
56377
|
+
"ui.agentMessages.settings.allowlist.add": "Thêm",
|
|
56378
|
+
"ui.agentMessages.settings.allowlist.add_allowed": "Cho phép tác nhân hoặc người dùng",
|
|
56379
|
+
"ui.agentMessages.settings.allowlist.add_blocked": "Chặn tác nhân hoặc người dùng",
|
|
56380
|
+
"ui.agentMessages.settings.allowlist.kind": "Loại",
|
|
56381
|
+
"ui.agentMessages.settings.allowlist.kind_agent": "Tác nhân",
|
|
56382
|
+
"ui.agentMessages.settings.allowlist.kind_person": "Người dùng",
|
|
56383
|
+
"ui.agentMessages.settings.allowlist.identifier": "Mã định danh",
|
|
56384
|
+
"ui.agentMessages.settings.allowlist.identifier_empty": "Nhập mã định danh.",
|
|
56385
|
+
"ui.agentMessages.settings.allowlist.identifier_long": "Mã định danh dài tối đa 128 ký tự.",
|
|
56386
|
+
"ui.agentMessages.settings.allowlist.identifier_invalid": "Mã định danh không được chứa khoảng trắng hoặc ký tự điều khiển.",
|
|
56387
|
+
"ui.agentMessages.settings.allowlist.remove": "Xóa",
|
|
56388
|
+
"ui.agentMessages.settings.allowlist.save": "Lưu phạm vi liên lạc",
|
|
56389
|
+
"ui.agentMessages.settings.allowlist.needs_entry": "Thêm ít nhất một tác nhân hoặc người dùng, hoặc chọn Mọi người trong tổ chức của tôi.",
|
|
56390
|
+
"ui.agentMessages.settings.allowlist.unchanged": "Không có thay đổi nào để lưu.",
|
|
56391
|
+
"ui.agentMessages.settings.session.title": "Phiên nhận tin nhắn mới",
|
|
56392
|
+
"ui.agentMessages.settings.session.help": "Phiên có thể thức dậy khi có tin nhắn mới; để trống = chỉ hiện huy hiệu.",
|
|
56393
|
+
"ui.agentMessages.settings.session.none": "Không có phiên — chỉ hiện huy hiệu",
|
|
56394
|
+
"ui.agentMessages.settings.session.unavailable": "Phiên này không còn khả dụng.",
|
|
56395
|
+
"ui.agentMessages.settings.dark.title": "Chưa khả dụng",
|
|
56396
|
+
"ui.agentMessages.settings.dark.body": "Tin nhắn tác nhân chưa khả dụng.",
|
|
56397
|
+
"ui.agentMessages.settings.dark.nothing_enabled": "Chưa bật gì trên máy này.",
|
|
56398
|
+
"ui.agentMessages.settings.error.title": "Không tải được tin nhắn tác nhân",
|
|
56399
|
+
"ui.agentMessages.settings.error.retry": "Thử lại",
|
|
56400
|
+
"ui.agentMessages.settings.error.unreadable": "Máy này trả về phản hồi cài đặt mà ứng dụng không đọc được.",
|
|
56401
|
+
"ui.agentMessages.settings.refusal.sign_in": "Đăng nhập Radient để quản lý tin nhắn tác nhân.",
|
|
56402
|
+
"ui.agentMessages.settings.refusal.not_available": "Tin nhắn tác nhân không khả dụng cho tài khoản này.",
|
|
56403
|
+
"ui.agentMessages.settings.refusal.disabled": "Tổ chức của bạn đã tắt tin nhắn tác nhân.",
|
|
56404
|
+
"ui.agentMessages.settings.refusal.rate_limited": "Quá nhiều yêu cầu. Chờ một lát rồi thử lại.",
|
|
56405
|
+
"ui.agentMessages.settings.refusal.invalid_request": "Thay đổi đó không được chấp nhận. Kiểm tra mục nhập rồi thử lại.",
|
|
56406
|
+
"ui.agentMessages.settings.refusal.generic": "Không cập nhật được tin nhắn tác nhân. Hãy thử lại.",
|
|
56407
|
+
"ui.agentMessages.settings.allowlist.read_only": "Phạm vi liên lạc ở chế độ chỉ đọc khi tin nhắn tác nhân đang tắt.",
|
|
56408
|
+
"ui.agentMessages.settings.allowlist.agent_id": "ID tác nhân",
|
|
56409
|
+
"ui.agentMessages.settings.allowlist.person_id": "ID người dùng",
|
|
56410
|
+
"ui.agentMessages.settings.allowlist.identifier_help_agent": "Nhập ID tác nhân (bep_…)",
|
|
56411
|
+
"ui.agentMessages.settings.allowlist.identifier_help_person": "Nhập ID người dùng (acc_…)",
|
|
56412
|
+
"ui.agentMessages.settings.error.no_changes": "Không có cài đặt nào bị thay đổi. Hãy thử lại để kiểm tra trạng thái hiện tại.",
|
|
56413
|
+
"ui.agentMessages.settings.hold.chief_of_staff": "{count, plural, other {Có {count} tin nhắn đang chờ chánh văn phòng của bạn. Chỉ cần gửi một tin nhắn trong cuộc trò chuyện đó là sẽ nhận được.}}",
|
|
56414
|
+
"ui.agentMessages.settings.hold.chief_of_staff_unlinked": "{count, plural, other {Có {count} tin nhắn đang chờ chánh văn phòng của bạn. Tìm cuộc trò chuyện đó trong thanh bên rồi gửi một tin nhắn là sẽ nhận được.}}",
|
|
56415
|
+
"ui.agentMessages.settings.hold.open": "Nhắn chánh văn phòng"
|
|
56416
|
+
};
|
|
56059
56417
|
const viUiAgentsDialogs = {
|
|
56060
56418
|
"ui.agents.dialogs.create.title": "Tạo tác nhân mới",
|
|
56061
56419
|
"ui.agents.dialogs.create.cancel": "Hủy",
|
|
@@ -57167,9 +57525,14 @@ const viUiConsole = {
|
|
|
57167
57525
|
"ui.console.create_failed.title": "Không thể khởi động bảng lệnh trong phiên này",
|
|
57168
57526
|
"ui.console.empty.detail": "Bảng lệnh chạy chương trình trong thư mục của cuộc trò chuyện này và giữ lại đầu ra, dù khung này có mở hay không.",
|
|
57169
57527
|
"ui.console.empty.title": "Phiên này chưa có bảng lệnh",
|
|
57528
|
+
"ui.console.ended.app_quit": "ứng dụng đã đóng nó khi thoát",
|
|
57170
57529
|
"ui.console.ended.exit_code": "mã thoát {code}",
|
|
57530
|
+
"ui.console.ended.exit_signal": "bị dừng bởi {signal}",
|
|
57171
57531
|
"ui.console.ended.exit_unknown": "chưa ghi nhận mã thoát",
|
|
57532
|
+
"ui.console.ended.input_blocked": "Cửa sổ dòng lệnh này đã kết thúc nên phím đó không được gửi. Mở bảng lệnh mới để nhập lại.",
|
|
57172
57533
|
"ui.console.ended.live": "Cửa sổ dòng lệnh này đã kết thúc",
|
|
57534
|
+
"ui.console.ended.marker": "Kết thúc lịch sử",
|
|
57535
|
+
"ui.console.ended.marker_detail": "Cửa sổ dòng lệnh này chỉ đọc. Chọn văn bản để sao chép.",
|
|
57173
57536
|
"ui.console.ended.restored": "Cửa sổ dòng lệnh này đã kết thúc và lịch sử đã được khôi phục",
|
|
57174
57537
|
"ui.console.loading.create": "Đang khởi động bảng lệnh",
|
|
57175
57538
|
"ui.console.loading.read": "Đang đọc bảng lệnh của phiên này",
|
|
@@ -57188,6 +57551,7 @@ const viUiConsole = {
|
|
|
57188
57551
|
"ui.console.unavailable.title": "Bảng lệnh không khả dụng trong ứng dụng này",
|
|
57189
57552
|
"ui.console.unavailable.unknown.detail": "Cửa sổ này không truy cập được bảng lệnh và không cho biết lý do. Lý do có trong nhật ký ứng dụng.",
|
|
57190
57553
|
"ui.console.tab.ended": "đã kết thúc",
|
|
57554
|
+
"ui.console.tab.exit_code": "mã thoát {code}",
|
|
57191
57555
|
"ui.console.tab.agent_opened": "Một tác nhân đã mở bảng lệnh này",
|
|
57192
57556
|
"ui.console.tab.agent_typed": "Một tác nhân đã nhập vào bảng lệnh này",
|
|
57193
57557
|
"ui.console.tab.close_label": "Đóng {title}, thẻ {index, number, ::group-off} trên {total, number, ::group-off}",
|
|
@@ -59327,7 +59691,10 @@ const zhCNUiAgentMessagesSettings = {
|
|
|
59327
59691
|
"ui.agentMessages.settings.allowlist.person_id": "人员ID",
|
|
59328
59692
|
"ui.agentMessages.settings.allowlist.identifier_help_agent": "输入智能体ID(bep_…)",
|
|
59329
59693
|
"ui.agentMessages.settings.allowlist.identifier_help_person": "输入人员ID(acc_…)",
|
|
59330
|
-
"ui.agentMessages.settings.error.no_changes": "未更改任何设置。请重试以检查当前状态。"
|
|
59694
|
+
"ui.agentMessages.settings.error.no_changes": "未更改任何设置。请重试以检查当前状态。",
|
|
59695
|
+
"ui.agentMessages.settings.hold.chief_of_staff": "{count, plural, other {{count}条消息待你的首席助理接收。在其对话中发一条消息即可送达。}}",
|
|
59696
|
+
"ui.agentMessages.settings.hold.chief_of_staff_unlinked": "{count, plural, other {{count}条消息待你的首席助理接收。在侧边栏中找到其对话,发一条消息即可送达。}}",
|
|
59697
|
+
"ui.agentMessages.settings.hold.open": "给首席助理发消息"
|
|
59331
59698
|
};
|
|
59332
59699
|
const zhCNUiAgentsDialogs = {
|
|
59333
59700
|
"ui.agents.dialogs.create.title": "新建智能体",
|
|
@@ -60451,9 +60818,14 @@ const zhCNUiConsole = {
|
|
|
60451
60818
|
"ui.console.create_failed.title": "无法在此会话中启动控制台",
|
|
60452
60819
|
"ui.console.empty.detail": "控制台在此对话的目录中运行程序,无论此面板是否打开,都会保留输出。",
|
|
60453
60820
|
"ui.console.empty.title": "此会话中没有控制台",
|
|
60821
|
+
"ui.console.ended.app_quit": "应用退出时将其关闭",
|
|
60454
60822
|
"ui.console.ended.exit_code": "退出码{code}",
|
|
60823
|
+
"ui.console.ended.exit_signal": "被{signal}终止",
|
|
60455
60824
|
"ui.console.ended.exit_unknown": "未获取退出码",
|
|
60825
|
+
"ui.console.ended.input_blocked": "此终端已结束,因此该按键未被发送。打开新的控制台即可再次输入。",
|
|
60456
60826
|
"ui.console.ended.live": "此终端已结束",
|
|
60827
|
+
"ui.console.ended.marker": "历史记录结束",
|
|
60828
|
+
"ui.console.ended.marker_detail": "此终端为只读状态。选中文本即可复制。",
|
|
60457
60829
|
"ui.console.ended.restored": "此终端已结束,历史记录已恢复",
|
|
60458
60830
|
"ui.console.loading.create": "正在启动控制台",
|
|
60459
60831
|
"ui.console.loading.read": "正在读取此会话的控制台",
|
|
@@ -60472,6 +60844,7 @@ const zhCNUiConsole = {
|
|
|
60472
60844
|
"ui.console.unavailable.title": "此应用中控制台不可用",
|
|
60473
60845
|
"ui.console.unavailable.unknown.detail": "此窗口无法连接控制台,也未说明原因。原因记录在应用日志中。",
|
|
60474
60846
|
"ui.console.tab.ended": "已结束",
|
|
60847
|
+
"ui.console.tab.exit_code": "退出{code}",
|
|
60475
60848
|
"ui.console.tab.agent_opened": "此控制台由智能体打开",
|
|
60476
60849
|
"ui.console.tab.agent_typed": "智能体已在此控制台中输入过内容",
|
|
60477
60850
|
"ui.console.tab.close_label": "关闭{title},第{index, number, ::group-off}个标签页,共{total, number, ::group-off}个",
|
|
@@ -63071,6 +63444,7 @@ const bundledCatalogues = {
|
|
|
63071
63444
|
},
|
|
63072
63445
|
ru: {
|
|
63073
63446
|
...ruUiAgentMessages,
|
|
63447
|
+
...ruUiAgentMessagesSettings,
|
|
63074
63448
|
...ruUiAgentsDialogs,
|
|
63075
63449
|
...ruUiAgents,
|
|
63076
63450
|
...ruUiAgentsModels,
|
|
@@ -63192,6 +63566,7 @@ const bundledCatalogues = {
|
|
|
63192
63566
|
},
|
|
63193
63567
|
vi: {
|
|
63194
63568
|
...viUiAgentMessages,
|
|
63569
|
+
...viUiAgentMessagesSettings,
|
|
63195
63570
|
...viUiAgentsDialogs,
|
|
63196
63571
|
...viUiAgents,
|
|
63197
63572
|
...viUiAgentsModels,
|
|
@@ -73037,7 +73412,7 @@ class DesktopNotifier {
|
|
|
73037
73412
|
notice.sessionId,
|
|
73038
73413
|
notice.surfaceName,
|
|
73039
73414
|
"",
|
|
73040
|
-
notice.exitCode === null ? "Console finished" : `Console exited with code ${notice.exitCode}`,
|
|
73415
|
+
notice.exitSignal ? `Console killed by ${notice.exitSignal}` : notice.exitCode === null ? "Console finished" : `Console exited with code ${notice.exitCode}`,
|
|
73041
73416
|
false,
|
|
73042
73417
|
false,
|
|
73043
73418
|
notice.surface
|