local-operator-ui 0.34.52 → 0.34.54

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.
Files changed (89) hide show
  1. package/out/main/index.js +1622 -17
  2. package/out/preload/index.js +54 -0
  3. package/out/renderer/assets/{_basePickBy-jKP04X-l.js → _basePickBy-CjlcNifv.js} +1 -1
  4. package/out/renderer/assets/{_baseUniq-C1Tb5Z81.js → _baseUniq-o0KeBMbn.js} +1 -1
  5. package/out/renderer/assets/{agent-details-page-BXYnUttm.js → agent-details-page-B_mPfefi.js} +1 -1
  6. package/out/renderer/assets/{agent-hub-page-SrDPuy2R.js → agent-hub-page-BYHsrmlA.js} +2 -2
  7. package/out/renderer/assets/{agents-page-BGpbOr-D.js → agents-page-DOt4Ktjv.js} +3 -3
  8. package/out/renderer/assets/{arc-C60IJR4W.js → arc-DFVKfWQu.js} +1 -1
  9. package/out/renderer/assets/{architectureDiagram-IEHRJDOE-CG2aUgQQ.js → architectureDiagram-IEHRJDOE-vpPdmlx-.js} +1 -1
  10. package/out/renderer/assets/{blockDiagram-JOT3LUYC-DG6vLb5j.js → blockDiagram-JOT3LUYC-R2vBVEG1.js} +1 -1
  11. package/out/renderer/assets/{book-open-CqpAQX_h.js → book-open-CfuxuX-l.js} +1 -1
  12. package/out/renderer/assets/browser-page-BpsxcPyu.js +1 -0
  13. package/out/renderer/assets/{browser-webauthn-prompt-BICZWWTE.js → browser-webauthn-prompt-DbKuqaik.js} +1 -1
  14. package/out/renderer/assets/{c4Diagram-VJAJSXHY-Dxl-T2ot.js → c4Diagram-VJAJSXHY-BdEM26t6.js} +1 -1
  15. package/out/renderer/assets/channel--0Jo_Ezu.js +1 -0
  16. package/out/renderer/assets/{chunk-4BMEZGHF-BTZU1mmj.js → chunk-4BMEZGHF-BoFwJNuc.js} +1 -1
  17. package/out/renderer/assets/{chunk-A2AXSNBT-q4ATawsA.js → chunk-A2AXSNBT-ho2uDxLt.js} +1 -1
  18. package/out/renderer/assets/{chunk-AEK57VVT-ZenDipzf.js → chunk-AEK57VVT-TPmT1lR6.js} +1 -1
  19. package/out/renderer/assets/{chunk-D6G4REZN-LiclW27B.js → chunk-D6G4REZN-DLDnsndg.js} +1 -1
  20. package/out/renderer/assets/{chunk-RZ5BOZE2-rimlHqns.js → chunk-RZ5BOZE2-CogvS2RR.js} +1 -1
  21. package/out/renderer/assets/{chunk-XZIHB7SX-W4sbYp78.js → chunk-XZIHB7SX-BX6k9Ig_.js} +1 -1
  22. package/out/renderer/assets/classDiagram-GIVACNV2-BTAknOfl.js +1 -0
  23. package/out/renderer/assets/classDiagram-v2-COTLJTTW-BTAknOfl.js +1 -0
  24. package/out/renderer/assets/clone-AE7GdVaL.js +1 -0
  25. package/out/renderer/assets/{console-mirror-CqKozfMV.js → console-mirror-D4VUczn2.js} +1 -1
  26. package/out/renderer/assets/{consoleCapture-Dt4bXfA5.js → consoleCapture-BZscABJW.js} +1 -1
  27. package/out/renderer/assets/{conversation-input-sync-Bud_iL2h.js → conversation-input-sync-_j7A_EDF.js} +259 -259
  28. package/out/renderer/assets/{dagre-OKDRZEBW-DReye3bj.js → dagre-OKDRZEBW-CnWKvNVv.js} +1 -1
  29. package/out/renderer/assets/{diagram-SSKATNLV-yQnXG8y9.js → diagram-SSKATNLV-CnaQJTb1.js} +1 -1
  30. package/out/renderer/assets/{diagram-VNBRO52H-Dy1ho1KJ.js → diagram-VNBRO52H-C0X5Htj5.js} +1 -1
  31. package/out/renderer/assets/{erDiagram-Q7BY3M3F-MvZHt7NH.js → erDiagram-Q7BY3M3F-BlWSXVBt.js} +1 -1
  32. package/out/renderer/assets/{error-boundary-CnAfZpXJ.js → error-boundary-BCQ7FGQc.js} +1 -1
  33. package/out/renderer/assets/{flowDiagram-4HSFHLVR-BSFgzIoa.js → flowDiagram-4HSFHLVR-CSMU0Hc_.js} +1 -1
  34. package/out/renderer/assets/{ganttDiagram-APWFNJXF-Dedj3NlS.js → ganttDiagram-APWFNJXF-OuBtu3nI.js} +1 -1
  35. package/out/renderer/assets/{gitGraphDiagram-7IBYFJ6S-Cu4jn0rm.js → gitGraphDiagram-7IBYFJ6S-z8O9AgtQ.js} +1 -1
  36. package/out/renderer/assets/{graph-CQdRsT3g.js → graph-DE2ohxxG.js} +1 -1
  37. package/out/renderer/assets/{index-gCeAf81g.js → index-BcVwaP5j.js} +1 -1
  38. package/out/renderer/assets/index-C9huVbt8.js +57 -0
  39. package/out/renderer/assets/index-DxyRyuQP.css +1 -0
  40. package/out/renderer/assets/{index-Cq2MGZTE.js → index-EI_2-v5u.js} +193 -193
  41. package/out/renderer/assets/{index-Dv4cmAE_.js → index-QCa7n3qU.js} +1 -1
  42. package/out/renderer/assets/{infoDiagram-PH2N3AL5-CuAzIGSj.js → infoDiagram-PH2N3AL5-a0rOJyNn.js} +1 -1
  43. package/out/renderer/assets/{installer-CNLF7ICd.js → installer-BRjexwGb.js} +1 -1
  44. package/out/renderer/assets/{journeyDiagram-U35MCT3I-CWJ2JJ4t.js → journeyDiagram-U35MCT3I-BaWlQxzG.js} +1 -1
  45. package/out/renderer/assets/{kanban-definition-NDS4AKOZ-E-V1z1_U.js → kanban-definition-NDS4AKOZ-ISbUCJsb.js} +1 -1
  46. package/out/renderer/assets/{layout-CpEZBnkZ.js → layout-Cq5p0Yo5.js} +1 -1
  47. package/out/renderer/assets/{legacy-agents-page-z45uS7-l.js → legacy-agents-page-w-ygCimA.js} +2 -2
  48. package/out/renderer/assets/{mermaid.core-DD0sotYo.js → mermaid.core-BZ_OD6fR.js} +5 -5
  49. package/out/renderer/assets/{mesh-page-BwlyEepu.js → mesh-page-GPZRPR4j.js} +1 -1
  50. package/out/renderer/assets/{mindmap-definition-ALO5MXBD-B83-pecE.js → mindmap-definition-ALO5MXBD-CAnWrx3w.js} +1 -1
  51. package/out/renderer/assets/{mini-DtTMJOfC.js → mini-CQ7ORVw7.js} +1 -1
  52. package/out/renderer/assets/{notebook-pen-7O_-yyf1.js → notebook-pen-Dd0WXtBw.js} +1 -1
  53. package/out/renderer/assets/{org-access-CTWNNvUI.js → org-access-CkXCfgnJ.js} +1 -1
  54. package/out/renderer/assets/{org-surface-gate-DqM2fDEM.js → org-surface-gate-CnNhHebI.js} +1 -1
  55. package/out/renderer/assets/{page-header-C9NIPdYQ.js → page-header-Dl5IO6UP.js} +1 -1
  56. package/out/renderer/assets/{pieDiagram-IB7DONF6-DdgrLAL8.js → pieDiagram-IB7DONF6-CrxsZY1R.js} +1 -1
  57. package/out/renderer/assets/projects-page-ygyrTO2Y.js +45 -0
  58. package/out/renderer/assets/{publication-validation-DxWRtzXi.js → publication-validation-CfKQMeAn.js} +1 -1
  59. package/out/renderer/assets/{quadrantDiagram-7GDLP6J5-DgXs6rcx.js → quadrantDiagram-7GDLP6J5-FDR-PDld.js} +1 -1
  60. package/out/renderer/assets/{radar-MK3ICKWK-FIFs14Hm.js → radar-MK3ICKWK-BNPTl6F1.js} +1 -1
  61. package/out/renderer/assets/{radient-auth-buttons-CjTgEezA.js → radient-auth-buttons-eShZasz1.js} +1 -1
  62. package/out/renderer/assets/{requirementDiagram-KVF5MWMF-DJ_fulOC.js → requirementDiagram-KVF5MWMF-DYSZWyII.js} +1 -1
  63. package/out/renderer/assets/{sankeyDiagram-QLVOVGJD-DkDkmgpo.js → sankeyDiagram-QLVOVGJD-0ynlxxtV.js} +1 -1
  64. package/out/renderer/assets/{schedules-page-BYp0ooeI.js → schedules-page-5j5ANXIf.js} +2 -2
  65. package/out/renderer/assets/{sequenceDiagram-X6HHIX6F-DslLI_jv.js → sequenceDiagram-X6HHIX6F-Dw4Xe-1g.js} +1 -1
  66. package/out/renderer/assets/settings-page-rEYr23iA.js +292 -0
  67. package/out/renderer/assets/{stateDiagram-DGXRK772-WjXX5ZFj.js → stateDiagram-DGXRK772-C4hZ7GES.js} +1 -1
  68. package/out/renderer/assets/stateDiagram-v2-YXO3MK2T-77mQmjut.js +1 -0
  69. package/out/renderer/assets/{timeline-definition-BDJGKUSR-B5dMwIwc.js → timeline-definition-BDJGKUSR-BuKwQy9m.js} +1 -1
  70. package/out/renderer/assets/{ui-preferences-store-C_k6yzj8.js → ui-preferences-store-BSjv1eml.js} +1 -1
  71. package/out/renderer/assets/{use-download-agent-mutation-Duu1Yzmd.js → use-download-agent-mutation-CHYPRtS_.js} +1 -1
  72. package/out/renderer/assets/{use-memberships-query-D0178BB5.js → use-memberships-query-DG-_x04X.js} +1 -1
  73. package/out/renderer/assets/{use-session-snapshot-DylLmksx.js → use-session-snapshot-CdDuQ-c-.js} +1 -1
  74. package/out/renderer/assets/{xychartDiagram-VJFVF3MP-ClyMBBI3.js → xychartDiagram-VJFVF3MP-Da65s1FG.js} +1 -1
  75. package/out/renderer/console-capture.html +5 -5
  76. package/out/renderer/index.html +7 -7
  77. package/out/renderer/installer.html +4 -4
  78. package/out/renderer/mini.html +7 -7
  79. package/package.json +4 -3
  80. package/out/renderer/assets/browser-page-C52F14Yv.js +0 -1
  81. package/out/renderer/assets/channel-Yjo7b_td.js +0 -1
  82. package/out/renderer/assets/classDiagram-GIVACNV2-Cdmkh24H.js +0 -1
  83. package/out/renderer/assets/classDiagram-v2-COTLJTTW-Cdmkh24H.js +0 -1
  84. package/out/renderer/assets/clone-BOQDMNRz.js +0 -1
  85. package/out/renderer/assets/index-CF-SqRCw.js +0 -57
  86. package/out/renderer/assets/index-CSvB6_Ie.css +0 -1
  87. package/out/renderer/assets/projects-page-Y9v0wFR-.js +0 -45
  88. package/out/renderer/assets/settings-page-CR012gt8.js +0 -292
  89. package/out/renderer/assets/stateDiagram-v2-YXO3MK2T-DPmr9Ge_.js +0 -1
package/out/main/index.js CHANGED
@@ -4656,6 +4656,119 @@ function resolveWindowChromeForLaunch(input) {
4656
4656
  problems
4657
4657
  };
4658
4658
  }
4659
+ const GLASS_COVERAGES = ["sidebars", "full"];
4660
+ const GLASS_MAC_MATERIALS = ["window", "menu", "popover"];
4661
+ const GLASS_WIN_MATERIALS = ["mica", "acrylic", "tabbed"];
4662
+ const DEFAULT_GLASS_SETTINGS = {
4663
+ enabled: false,
4664
+ coverage: "full",
4665
+ intensity: 40,
4666
+ material: "window"
4667
+ };
4668
+ const WIN_BACKGROUND_MATERIAL_MIN_BUILD = 22621;
4669
+ const parseVersion = (version) => version.split(".").map((part) => Number.parseInt(part, 10)).map((n) => Number.isFinite(n) ? n : 0);
4670
+ function glassCapabilityFor(input) {
4671
+ const none = (reason) => ({
4672
+ supported: false,
4673
+ mechanism: "none",
4674
+ reason,
4675
+ materials: [],
4676
+ defaultMaterial: DEFAULT_GLASS_SETTINGS.material,
4677
+ liquid: false,
4678
+ liveToggle: false
4679
+ });
4680
+ const version = parseVersion(input.osVersion);
4681
+ if (input.platform === "darwin") {
4682
+ if (input.reducedTransparency) return none("reduced-transparency");
4683
+ return {
4684
+ supported: true,
4685
+ mechanism: "vibrancy",
4686
+ reason: "ok",
4687
+ materials: GLASS_MAC_MATERIALS,
4688
+ defaultMaterial: "window",
4689
+ liquid: (version[0] ?? 0) >= 26,
4690
+ liveToggle: true
4691
+ };
4692
+ }
4693
+ if (input.platform === "win32") {
4694
+ if ((version[2] ?? 0) < WIN_BACKGROUND_MATERIAL_MIN_BUILD)
4695
+ return none("windows-too-old");
4696
+ if (input.reducedTransparency) return none("reduced-transparency");
4697
+ return {
4698
+ supported: true,
4699
+ mechanism: "background-material",
4700
+ reason: "ok",
4701
+ materials: GLASS_WIN_MATERIALS,
4702
+ defaultMaterial: "mica",
4703
+ liquid: false,
4704
+ liveToggle: false
4705
+ };
4706
+ }
4707
+ if (input.platform === "linux") return none("linux-no-native-blur");
4708
+ return none("unsupported-platform");
4709
+ }
4710
+ const isCoverage = (value) => GLASS_COVERAGES.includes(value);
4711
+ const migrateCoverage = (value) => value === "chrome" ? "sidebars" : value;
4712
+ function sanitizeGlassSettings(raw, capability, base = DEFAULT_GLASS_SETTINGS) {
4713
+ const record = raw !== null && typeof raw === "object" ? raw : {};
4714
+ const intensity = typeof record.intensity === "number" && Number.isFinite(record.intensity) ? Math.min(100, Math.max(0, Math.round(record.intensity))) : base.intensity;
4715
+ const requested = typeof record.material === "string" ? record.material : base.material;
4716
+ const offered = capability.materials;
4717
+ const known = [
4718
+ ...GLASS_MAC_MATERIALS,
4719
+ ...GLASS_WIN_MATERIALS
4720
+ ];
4721
+ const material = offered.length === 0 ? known.includes(requested) ? requested : base.material : offered.includes(requested) ? requested : capability.defaultMaterial;
4722
+ return {
4723
+ enabled: typeof record.enabled === "boolean" ? record.enabled : base.enabled,
4724
+ coverage: isCoverage(migrateCoverage(record.coverage)) ? migrateCoverage(record.coverage) : base.coverage,
4725
+ intensity,
4726
+ material
4727
+ };
4728
+ }
4729
+ const glassIsActive = (settings, capability) => settings.enabled && capability.supported;
4730
+ const GLASS_TRANSPARENT = "#00000000";
4731
+ function glassWindowOptions(settings, capability, platform) {
4732
+ const inactive = platform === "darwin" ? { visualEffectState: "active" } : {};
4733
+ if (!glassIsActive(settings, capability)) return inactive;
4734
+ if (capability.mechanism === "vibrancy") {
4735
+ return {
4736
+ backgroundColor: GLASS_TRANSPARENT,
4737
+ vibrancy: macVibrancyFor(settings.material),
4738
+ visualEffectState: "active"
4739
+ };
4740
+ }
4741
+ if (capability.mechanism === "background-material") {
4742
+ return {
4743
+ backgroundColor: GLASS_TRANSPARENT,
4744
+ backgroundMaterial: winMaterialFor(settings.material)
4745
+ };
4746
+ }
4747
+ return inactive;
4748
+ }
4749
+ function groundWithGlass(ground, settings, capability, platform) {
4750
+ return {
4751
+ backgroundColor: ground,
4752
+ ...glassWindowOptions(settings, capability, platform)
4753
+ };
4754
+ }
4755
+ function macVibrancyFor(material) {
4756
+ return material === "menu" ? "menu" : material === "popover" ? "popover" : "under-window";
4757
+ }
4758
+ function winMaterialFor(material) {
4759
+ return material === "acrylic" || material === "tabbed" ? material : "mica";
4760
+ }
4761
+ const WINDOW_GLASS_ARG = "--lo-window-glass";
4762
+ const WINDOW_GLASS_GET_CHANNEL = "window-glass:get";
4763
+ const WINDOW_GLASS_SET_CHANNEL = "window-glass:set";
4764
+ const WINDOW_GLASS_SCHEME_CHANNEL = "window-glass:scheme";
4765
+ const WINDOW_GLASS_STATE_CHANNEL = "window-glass:state";
4766
+ const WINDOW_GLASS_FILE = "window-glass.json";
4767
+ function windowGlassArgument(state2, scheme) {
4768
+ if (!state2.active) return `${WINDOW_GLASS_ARG}=off`;
4769
+ const { settings, capability } = state2;
4770
+ return `${WINDOW_GLASS_ARG}=${capability.mechanism}:${settings.coverage}:${settings.intensity}:${settings.material}:${scheme}`;
4771
+ }
4659
4772
  const SERVE_RUN_DIRNAME = "run/serve";
4660
4773
  const REAPED_DIRNAME = "reaped";
4661
4774
  const REAPED_MAX_FILES = 200;
@@ -32334,6 +32447,27 @@ const enUiCanvas = {
32334
32447
  "ui.canvas.files.prepareError": "Could not prepare a local copy for this action",
32335
32448
  "ui.canvas.files.pathCopyNote": "Open, folder and path actions create a local copy in this conversation's scratchpad."
32336
32449
  };
32450
+ const enUiChatComposer = {
32451
+ "ui.chat.composer.clear_message": "Clear message",
32452
+ "ui.chat.composer.message": "Message",
32453
+ "ui.chat.composer.attach_file": "Attach file",
32454
+ "ui.chat.composer.start_recording": "Start recording",
32455
+ "ui.chat.composer.confirm_recording": "Confirm recording",
32456
+ "ui.chat.composer.confirm_recording_hint": "Confirm recording (Enter)",
32457
+ "ui.chat.composer.cancel_recording": "Cancel recording",
32458
+ "ui.chat.composer.cancel_recording_hint": "Cancel recording (Esc)",
32459
+ "ui.chat.composer.stop": "Stop",
32460
+ "ui.chat.composer.stop_work_hint": "Stop this session's current work (Esc)",
32461
+ "ui.chat.composer.stop_agent": "Stop agent",
32462
+ "ui.chat.composer.ask_aside": "Ask the aside",
32463
+ "ui.chat.composer.send_message": "Send message",
32464
+ "ui.chat.composer.starting": "Starting",
32465
+ "ui.chat.composer.starting_recording": "Starting recording",
32466
+ "ui.chat.composer.start_recording_hint": "Start recording ({shortcut} or hold {pushToTalk})",
32467
+ "ui.chat.composer.processing_audio": "Processing audio",
32468
+ "ui.chat.composer.welcome": "What can I help you with today?",
32469
+ "ui.chat.composer.delivery_remedies_hint": "The message that could not be delivered has Send again and Edit controls in the conversation above this box: press Shift+Tab to reach them."
32470
+ };
32337
32471
  const enUiChatComposerMedia = {
32338
32472
  "ui.chat.composer_media.recording": "Recording",
32339
32473
  "ui.chat.composer_media.confirms": "confirms",
@@ -32343,6 +32477,24 @@ const enUiChatComposerMedia = {
32343
32477
  "ui.chat.composer_media.preview_failed": "Could not be previewed",
32344
32478
  "ui.chat.composer_media.remove_attachment": "Remove attachment"
32345
32479
  };
32480
+ const enUiChatDialogs = {
32481
+ "ui.chat.dialogs.delete_title": "Delete this conversation?",
32482
+ "ui.chat.dialogs.delete_action": "Delete",
32483
+ "ui.chat.dialogs.archive_action": "Archive",
32484
+ "ui.chat.dialogs.cancel": "Cancel"
32485
+ };
32486
+ const enUiChatHeader = {
32487
+ "ui.chat.header.conversation_name": "Conversation name",
32488
+ "ui.chat.header.archived_hint": "This conversation is archived. It is hidden from your chats until you restore it.",
32489
+ "ui.chat.header.archived": "Archived",
32490
+ "ui.chat.header.actions": "Conversation actions",
32491
+ "ui.chat.header.copy_id": "Copy session ID",
32492
+ "ui.chat.header.move_device": "Move to another device…",
32493
+ "ui.chat.header.transcript_display": "Transcript display",
32494
+ "ui.chat.header.delete": "Delete conversation…",
32495
+ "ui.chat.header.close_run_details": "Close run details",
32496
+ "ui.chat.header.open_run_details": "Open run details"
32497
+ };
32346
32498
  const enUiChat = {
32347
32499
  "ui.chat.usage.continue": "Included quota used; credits will continue.",
32348
32500
  "ui.chat.usage.family_caps": "Model-family caps still apply.",
@@ -33328,7 +33480,424 @@ const enUiOnboarding = {
33328
33480
  "ui.onboarding.modal.step_of": "Step {current, number, ::group-off} of {total, number, ::group-off}",
33329
33481
  "ui.onboarding.modal.steps_total": "{total, plural, one {{total, number, ::group-off} step} other {{total, number, ::group-off} steps}}"
33330
33482
  };
33331
- const enUiProjects = {};
33483
+ const enUiProjects = {
33484
+ "ui.projects.board_window_select.projects_updated_within": "Projects updated within",
33485
+ "ui.projects.board_window_select.shows_projects_last_updated_within_this_window_older_ones_are_hid": "Shows projects last updated within this window; older ones are hidden.",
33486
+ "ui.projects.count.milestones_are": "{count, plural, one {{count, number, ::group-off} milestone is} other {{count, number, ::group-off} milestones are}}",
33487
+ "ui.projects.count.moved_open": "Moved to {status} with {open, plural, one {{open, number, ::group-off} milestone} other {{open, number, ::group-off} milestones}} still open",
33488
+ "ui.projects.count.project": "{count, plural, one {{count, number, ::group-off} project} other {{count, number, ::group-off} projects}}",
33489
+ "ui.projects.count.session": "{count, plural, one {{count, number, ::group-off} session} other {{count, number, ::group-off} sessions}}",
33490
+ "ui.projects.count.subagent": "{count, plural, one {{count, number, ::group-off} subagent} other {{count, number, ::group-off} subagents}}",
33491
+ "ui.projects.count.subagent_running": "{count, plural, one {{count, number, ::group-off} subagent running} other {{count, number, ::group-off} subagents running}}",
33492
+ "ui.projects.count.todo": "{count, plural, one {{count, number, ::group-off} todo} other {{count, number, ::group-off} todos}}",
33493
+ "ui.projects.count.undated": "{count, plural, one {{count, number, ::group-off} project without dates} other {{count, number, ::group-off} projects without dates}}",
33494
+ "ui.projects.count.update": "{count, plural, one {{count, number, ::group-off} update} other {{count, number, ::group-off} updates}}",
33495
+ "ui.projects.examples.owner": "atlas",
33496
+ "ui.projects.examples.team": "platform",
33497
+ "ui.projects.project_board.actions_for_displayname": "Actions for {displayName}",
33498
+ "ui.projects.project_board.after_label": "after {label}",
33499
+ "ui.projects.project_board.before_label": "before {label}",
33500
+ "ui.projects.project_board.between_label_and_label_2": "between {label} and {label_2}",
33501
+ "ui.projects.project_board.delete": "Delete",
33502
+ "ui.projects.project_board.drag_the_header_or_press_the_arrow_keys_to_move_this_column": "Drag the header, or press the arrow keys, to move this column.",
33503
+ "ui.projects.project_board.edit": "Edit",
33504
+ "ui.projects.project_board.finished": "Finished",
33505
+ "ui.projects.project_board.in_flight": "In flight",
33506
+ "ui.projects.project_board.in_place": "in place",
33507
+ "ui.projects.project_board.label_column_is_already_the_last_column": "{label} column is already {the_last_column}.",
33508
+ "ui.projects.project_board.loading_linked_sessions": "Loading linked sessions…",
33509
+ "ui.projects.project_board.move_cancelled": "Move cancelled.",
33510
+ "ui.projects.project_board.move_label_column": "Move {label} column",
33511
+ "ui.projects.project_board.moved_label_column_to_position_indexof_status_1_of_length": "Moved {label} column to position {indexOf_status____1} of {length}.",
33512
+ "ui.projects.project_board.moving_label_column": "Moving {label} column.",
33513
+ "ui.projects.project_board.moving_label_column_it_will_drop_status_over": "Moving {label} column; it will drop {status__over}.",
33514
+ "ui.projects.project_board.no_sessions_linked_yet": "No sessions linked yet.",
33515
+ "ui.projects.project_board.on_hold": "On hold",
33516
+ "ui.projects.project_board.open": "Open",
33517
+ "ui.projects.project_board.open_displayname": "Open {displayName}",
33518
+ "ui.projects.project_board.overdue": "Overdue",
33519
+ "ui.projects.project_board.request_update": "Request update",
33520
+ "ui.projects.project_board.sessions_linked_to_displayname": "Sessions linked to {displayName}",
33521
+ "ui.projects.project_board.set_status": "Set status",
33522
+ "ui.projects.project_board.the_first_column": "the first column",
33523
+ "ui.projects.project_board.the_last_column": "the last column",
33524
+ "ui.projects.project_board.the_linked_sessions_could_not_be_read": "The linked sessions could not be read.",
33525
+ "ui.projects.project_board.try_again": "Try again",
33526
+ "ui.projects.project_delete_dialog.cancel": "Cancel",
33527
+ "ui.projects.project_delete_dialog.delete_project": "Delete project",
33528
+ "ui.projects.project_delete_dialog.delete_this_project": "Delete this project?",
33529
+ "ui.projects.project_delete_dialog.the_project_was_not_deleted": "The project was not deleted.",
33530
+ "ui.projects.project_delete_dialog.this_deletes_the_project_and_its_milestones_the_sessions_linked_t": "This deletes the project and its milestones. The sessions linked to it are not touched.",
33531
+ "ui.projects.project_delete_dialog.to_confirm": "to confirm.",
33532
+ "ui.projects.project_delete_dialog.type": "Type",
33533
+ "ui.projects.project_delete_dialog.type_the_project_name_to_confirm": "Type the project name to confirm",
33534
+ "ui.projects.project_detail.all_projects": "All projects",
33535
+ "ui.projects.project_detail.delete": "Delete",
33536
+ "ui.projects.project_detail.loading_project": "Loading project",
33537
+ "ui.projects.project_detail.progress": "Progress",
33538
+ "ui.projects.project_detail.project_deleted": "Project deleted",
33539
+ "ui.projects.project_detail.sent_to_value1": "Sent to {value1}",
33540
+ "ui.projects.project_detail.session_started_but_linking_it_failed_linkfailure": "Session started, but linking it failed: {linkFailure}",
33541
+ "ui.projects.project_detail.session_started_withtarget_and_linked_to_displayname": "Session started{withTarget} and linked to {displayName}.",
33542
+ "ui.projects.project_detail.that_session_already_has_a_message_going_out_try_again_in_a_momen": "That session already has a message going out. Try again in a moment.",
33543
+ "ui.projects.project_detail.the_link_was_refused": "the link was refused",
33544
+ "ui.projects.project_detail.the_message_was_not_sent": "The message was not sent.",
33545
+ "ui.projects.project_detail.the_milestone_was_not_added": "The milestone was not added.",
33546
+ "ui.projects.project_detail.the_milestone_was_not_removed": "The milestone was not removed.",
33547
+ "ui.projects.project_detail.the_milestone_was_not_updated": "The milestone was not updated.",
33548
+ "ui.projects.project_detail.the_project_could_not_be_read": "The project could not be read.",
33549
+ "ui.projects.project_detail.the_session_could_not_be_started": "The session could not be started.",
33550
+ "ui.projects.project_detail.the_session_was_not_linked": "The session was not linked.",
33551
+ "ui.projects.project_detail.the_session_was_not_unlinked": "The session was not unlinked.",
33552
+ "ui.projects.project_detail.this_project_could_not_be_found_it_may_have_been_deleted": "This project could not be found. It may have been deleted.",
33553
+ "ui.projects.project_detail.try_again": "Try again",
33554
+ "ui.projects.project_detail.with_value1": " with {value1}",
33555
+ "ui.projects.project_done_anyway_dialog.cancel": "Cancel",
33556
+ "ui.projects.project_done_anyway_dialog.close": "Close",
33557
+ "ui.projects.project_done_anyway_dialog.mark_done_anyway": "Mark done anyway",
33558
+ "ui.projects.project_done_anyway_dialog.mark_done_with_open_milestones": "Mark done with open milestones?",
33559
+ "ui.projects.project_done_anyway_dialog.projectlabel_moves_to_done_and_its_milestones_stay_open": "{projectLabel} moves to Done and its milestones stay open.",
33560
+ "ui.projects.project_done_anyway_dialog.show_all_length_open_milestones": "Show all {length, plural, one {{length, number, ::group-off} open milestone} other {{length, number, ::group-off} open milestones}}",
33561
+ "ui.projects.project_done_anyway_dialog.the_project_moves_to_done_and_its_milestones_stay_open": "The project moves to Done and its milestones stay open.",
33562
+ "ui.projects.project_edit_model.a_project_with_this_key_already_exists": "A project with this key already exists.",
33563
+ "ui.projects.project_edit_model.dates_are_yyyy_mm_dd_or_empty": "Dates are YYYY-MM-DD, or empty.",
33564
+ "ui.projects.project_edit_model.estimates_are_greater_than_0_and_at_most_1000": "Estimates are greater than 0 and at most 1000.",
33565
+ "ui.projects.project_edit_model.keep_the_description_within_value1_characters": "Keep the description within {value1, plural, one {{value1, number, ::group-off} character} other {{value1, number, ::group-off} characters}}.",
33566
+ "ui.projects.project_edit_model.owners": "Owners",
33567
+ "ui.projects.project_edit_model.teams": "Teams",
33568
+ "ui.projects.project_edit_model.teams_are_at_most_value2_characters": "{teams} are at most {value2, plural, one {{value2, number, ::group-off} character} other {{value2, number, ::group-off} characters}}.",
33569
+ "ui.projects.project_edit_model.the_project_was_not_saved": "The project was not saved.",
33570
+ "ui.projects.project_edit_model.the_target_date_is_before_the_start_date": "The target date is before the start date.",
33571
+ "ui.projects.project_edit_model.titles_are_at_most_value1_characters": "Titles are at most {value1, plural, one {{value1, number, ::group-off} character} other {{value1, number, ::group-off} characters}}.",
33572
+ "ui.projects.project_edit_model.up_to_project_tags_max_tags": "Up to {PROJECT_TAGS_MAX, plural, one {{PROJECT_TAGS_MAX, number, ::group-off} tag} other {{PROJECT_TAGS_MAX, number, ::group-off} tags}}.",
33573
+ "ui.projects.project_editors.a_short_name_for_the_workstream": "A short name for the workstream",
33574
+ "ui.projects.project_editors.add_a_title": "Add a title",
33575
+ "ui.projects.project_editors.add_description": "Add description",
33576
+ "ui.projects.project_editors.clearing_an_estimate_is_not_supported_yet_saving_keeps_its_curren": "Clearing an estimate is not supported yet — saving keeps its current value.",
33577
+ "ui.projects.project_editors.days": "Days",
33578
+ "ui.projects.project_editors.description": "Description",
33579
+ "ui.projects.project_editors.description_mode": "Description mode",
33580
+ "ui.projects.project_editors.discard_the_field_edit": "Discard the {field} edit",
33581
+ "ui.projects.project_editors.display_saved": "{display} saved",
33582
+ "ui.projects.project_editors.edit_field": "Edit {field}",
33583
+ "ui.projects.project_editors.estimate": "Estimate",
33584
+ "ui.projects.project_editors.estimate_unit": "Estimate unit",
33585
+ "ui.projects.project_editors.key": "Key",
33586
+ "ui.projects.project_editors.mark_done_anyway": "Mark done anyway…",
33587
+ "ui.projects.project_editors.markdown_headings_lists_code": "Markdown — headings, lists, code.",
33588
+ "ui.projects.project_editors.nothing_to_preview_yet": "Nothing to preview yet.",
33589
+ "ui.projects.project_editors.owner": "Owner",
33590
+ "ui.projects.project_editors.points": "Points",
33591
+ "ui.projects.project_editors.preview": "Preview",
33592
+ "ui.projects.project_editors.q4_payments": "q4, payments",
33593
+ "ui.projects.project_editors.retry_saving_the_field": "Retry saving the {field}",
33594
+ "ui.projects.project_editors.review_milestones": "Review milestones",
33595
+ "ui.projects.project_editors.save_field": "Save {field}",
33596
+ "ui.projects.project_editors.saving_the_field": "Saving the {field}",
33597
+ "ui.projects.project_editors.start": "Start",
33598
+ "ui.projects.project_editors.status": "Status",
33599
+ "ui.projects.project_editors.tags": "Tags",
33600
+ "ui.projects.project_editors.target": "Target",
33601
+ "ui.projects.project_editors.team": "Team",
33602
+ "ui.projects.project_editors.title": "Title",
33603
+ "ui.projects.project_editors.tolowercase_date": "{toLowerCase} date",
33604
+ "ui.projects.project_editors.write": "Write",
33605
+ "ui.projects.project_filters.complete": "Complete",
33606
+ "ui.projects.project_filters.days": "Days",
33607
+ "ui.projects.project_filters.due_within_30_days": "Due within 30 days",
33608
+ "ui.projects.project_filters.due_within_7_days": "Due within 7 days",
33609
+ "ui.projects.project_filters.estimate": "Estimate",
33610
+ "ui.projects.project_filters.has_live_sessions": "Has live sessions",
33611
+ "ui.projects.project_filters.incomplete": "Incomplete",
33612
+ "ui.projects.project_filters.live_sessions": "Live sessions",
33613
+ "ui.projects.project_filters.milestones": "Milestones",
33614
+ "ui.projects.project_filters.no_estimate": "No estimate",
33615
+ "ui.projects.project_filters.no_live_sessions": "No live sessions",
33616
+ "ui.projects.project_filters.no_owner": "No owner",
33617
+ "ui.projects.project_filters.no_target_date": "No target date",
33618
+ "ui.projects.project_filters.no_team": "No team",
33619
+ "ui.projects.project_filters.none_set": "None set",
33620
+ "ui.projects.project_filters.not_reported": "Not reported",
33621
+ "ui.projects.project_filters.overdue": "Overdue",
33622
+ "ui.projects.project_filters.owner": "Owner",
33623
+ "ui.projects.project_filters.points": "Points",
33624
+ "ui.projects.project_filters.progress": "Progress",
33625
+ "ui.projects.project_filters.stale": "Stale",
33626
+ "ui.projects.project_filters.status": "Status",
33627
+ "ui.projects.project_filters.tags": "Tags",
33628
+ "ui.projects.project_filters.target_date": "Target date",
33629
+ "ui.projects.project_filters.team": "Team",
33630
+ "ui.projects.project_filters.up_to_date": "Up to date",
33631
+ "ui.projects.project_filters_panel.clear_all": "Clear all",
33632
+ "ui.projects.project_filters_panel.filters": "Filters",
33633
+ "ui.projects.project_filters_panel.sort_by_key": "Sort by {key}",
33634
+ "ui.projects.project_filters_panel.sort_by_sortcolumnlabel_column": "Sort by {sortColumnLabel_column}",
33635
+ "ui.projects.project_filters_panel.sort_by_sortcolumnlabel_column_value2": "Sort by {sortColumnLabel_column}, {value2}",
33636
+ "ui.projects.project_form_dialog.cancel": "Cancel",
33637
+ "ui.projects.project_form_dialog.comma_separated_up_to_8_lowercase_letters_digits_underscore_or_da": "Comma-separated, up to 8. Lowercase letters, digits, underscore or dash.",
33638
+ "ui.projects.project_form_dialog.create_project": "Create project",
33639
+ "ui.projects.project_form_dialog.days": "Days",
33640
+ "ui.projects.project_form_dialog.derived_from_the_title_until_you_edit_it": "Derived from the title until you edit it.",
33641
+ "ui.projects.project_form_dialog.description": "Description",
33642
+ "ui.projects.project_form_dialog.description_mode": "Description mode",
33643
+ "ui.projects.project_form_dialog.estimate": "Estimate",
33644
+ "ui.projects.project_form_dialog.estimate_unit": "Estimate unit",
33645
+ "ui.projects.project_form_dialog.key": "Key",
33646
+ "ui.projects.project_form_dialog.letters_digits_dot_underscore_or_dash_no_spaces": "Letters, digits, dot, underscore or dash; no spaces.",
33647
+ "ui.projects.project_form_dialog.markdown_headings_lists_code": "Markdown — headings, lists, code.",
33648
+ "ui.projects.project_form_dialog.moving_a_project_to_done_stamps_today_as_its_completion_date": "Moving a project to Done stamps today as its completion date.",
33649
+ "ui.projects.project_form_dialog.new_project": "New project",
33650
+ "ui.projects.project_form_dialog.nothing_to_preview_yet": "Nothing to preview yet.",
33651
+ "ui.projects.project_form_dialog.owner": "Owner",
33652
+ "ui.projects.project_form_dialog.payments_migration": "Payments migration",
33653
+ "ui.projects.project_form_dialog.points": "Points",
33654
+ "ui.projects.project_form_dialog.preview": "Preview",
33655
+ "ui.projects.project_form_dialog.q4_payments": "q4, payments",
33656
+ "ui.projects.project_form_dialog.start_date": "Start date",
33657
+ "ui.projects.project_form_dialog.status": "Status",
33658
+ "ui.projects.project_form_dialog.tags": "Tags",
33659
+ "ui.projects.project_form_dialog.target_date": "Target date",
33660
+ "ui.projects.project_form_dialog.team": "Team",
33661
+ "ui.projects.project_form_dialog.the_project_was_not_saved": "The project was not saved.",
33662
+ "ui.projects.project_form_dialog.title": "Title",
33663
+ "ui.projects.project_form_dialog.write": "Write",
33664
+ "ui.projects.project_links.busy": "busy",
33665
+ "ui.projects.project_links.close": "Close",
33666
+ "ui.projects.project_links.conversations_already_linked_to_this_project_are_not_listed": "Conversations already linked to this project are not listed.",
33667
+ "ui.projects.project_links.link_a_session": "Link a session",
33668
+ "ui.projects.project_links.link_session": "Link session",
33669
+ "ui.projects.project_links.linked_sessions": "Linked sessions",
33670
+ "ui.projects.project_links.loading_sessions": "Loading sessions",
33671
+ "ui.projects.project_links.message_title": "Message {title}",
33672
+ "ui.projects.project_links.new_session": "New session",
33673
+ "ui.projects.project_links.no_sessions_linked_yet_link_the_conversations_that_are_working_on": "No sessions linked yet. Link the conversations that are working on this project so its progress stays with them.",
33674
+ "ui.projects.project_links.search_conversations": "Search conversations",
33675
+ "ui.projects.project_links.search_sessions": "Search sessions",
33676
+ "ui.projects.project_links.session": "Session",
33677
+ "ui.projects.project_links.unlink_title": "Unlink {title}",
33678
+ "ui.projects.project_list.estimate": "Estimate",
33679
+ "ui.projects.project_list.label_column": "{label} column",
33680
+ "ui.projects.project_list.live": "Live",
33681
+ "ui.projects.project_list.milestones": "Milestones",
33682
+ "ui.projects.project_list.not_reported": "not reported",
33683
+ "ui.projects.project_list.progress": "Progress",
33684
+ "ui.projects.project_list.project": "Project",
33685
+ "ui.projects.project_list.project_columns": "Project columns",
33686
+ "ui.projects.project_list.status": "Status",
33687
+ "ui.projects.project_list.target": "Target",
33688
+ "ui.projects.project_milestones.add": "Add",
33689
+ "ui.projects.project_milestones.beta_cut": "beta cut",
33690
+ "ui.projects.project_milestones.dates_are_yyyy_mm_dd_or_empty": "Dates are YYYY-MM-DD, or empty.",
33691
+ "ui.projects.project_milestones.mark_name_complete": "Mark {name} complete",
33692
+ "ui.projects.project_milestones.mark_name_not_complete": "Mark {name} not complete",
33693
+ "ui.projects.project_milestones.milestones": "Milestones",
33694
+ "ui.projects.project_milestones.new_milestone": "New milestone",
33695
+ "ui.projects.project_milestones.no_milestones_yet_add_one_below_to_mark_the_dates_this_project_is": "No milestones yet. Add one below to mark the dates this project is planned around.",
33696
+ "ui.projects.project_milestones.remove_name": "Remove {name}",
33697
+ "ui.projects.project_milestones.target_date": "Target date",
33698
+ "ui.projects.project_model.active": "Active",
33699
+ "ui.projects.project_model.age_ago": "{age} ago",
33700
+ "ui.projects.project_model.agent_name": "agent {name}",
33701
+ "ui.projects.project_model.all_time": "All time",
33702
+ "ui.projects.project_model.archived": "Archived",
33703
+ "ui.projects.project_model.by_reporter": "by {reporter}",
33704
+ "ui.projects.project_model.clause": " ({clause})",
33705
+ "ui.projects.project_model.completed": "Completed",
33706
+ "ui.projects.project_model.completed_day": "completed {day}",
33707
+ "ui.projects.project_model.completed_total": "{completed}/{total}",
33708
+ "ui.projects.project_model.count_live": "{count} · {live}",
33709
+ "ui.projects.project_model.count_still_open_clause_clause": "{count} still open{clause________clause}.",
33710
+ "ui.projects.project_model.done": "Done",
33711
+ "ui.projects.project_model.due_day": "due {day}",
33712
+ "ui.projects.project_model.join_and_hidden_more": "{join} and {hidden} more",
33713
+ "ui.projects.project_model.join_and_length_1": "{join} and {length___1}",
33714
+ "ui.projects.project_model.just_now": "just now",
33715
+ "ui.projects.project_model.last_24_hours": "Last 24 hours",
33716
+ "ui.projects.project_model.last_30_days": "Last 30 days",
33717
+ "ui.projects.project_model.last_7_days": "Last 7 days",
33718
+ "ui.projects.project_model.last_90_days": "Last 90 days",
33719
+ "ui.projects.project_model.live": "Live",
33720
+ "ui.projects.project_model.live_live": "{live, plural, one {{live, number, ::group-off} live} other {{live, number, ::group-off} live}}",
33721
+ "ui.projects.project_model.milestones_are_still_open_on_this_project_complete_or_remove_them": "Milestones are still open on this project. Complete or remove them, then mark it done.",
33722
+ "ui.projects.project_model.milestones_milestones": "milestones {milestones}",
33723
+ "ui.projects.project_model.missing": "Missing",
33724
+ "ui.projects.project_model.moved_to_statuslabel": "Moved to {statusLabel}",
33725
+ "ui.projects.project_model.no_progress": "no progress",
33726
+ "ui.projects.project_model.no_team": "No team",
33727
+ "ui.projects.project_model.not_reported_yet": "not reported yet",
33728
+ "ui.projects.project_model.nothing_changed_in_phrase": "Nothing changed in {phrase}.",
33729
+ "ui.projects.project_model.overdue": "Overdue",
33730
+ "ui.projects.project_model.paused": "Paused",
33731
+ "ui.projects.project_model.planning": "Planning",
33732
+ "ui.projects.project_model.qa": "QA",
33733
+ "ui.projects.project_model.reported_progressagephrase_age": "reported {progressAgePhrase_age}",
33734
+ "ui.projects.project_model.session_reportedby": "session {reportedBy}",
33735
+ "ui.projects.project_model.some_milestones_are_still_open": "Some milestones are still open.",
33736
+ "ui.projects.project_model.stale": "Stale",
33737
+ "ui.projects.project_model.stopped": "Stopped",
33738
+ "ui.projects.project_model.team_name": "team {name}",
33739
+ "ui.projects.project_model.the_last_24_hours": "the last 24 hours",
33740
+ "ui.projects.project_model.the_last_30_days": "the last 30 days",
33741
+ "ui.projects.project_model.the_last_7_days": "the last 7 days",
33742
+ "ui.projects.project_model.the_last_90_days": "the last 90 days",
33743
+ "ui.projects.project_model.the_operator": "the operator",
33744
+ "ui.projects.project_model.the_project_was_not_moved_try_again_or_open_it_to_change_its_stat": "The project was not moved. Try again, or open it to change its status.",
33745
+ "ui.projects.project_model.this_can_t_be_marked_done_yet_count_still_incomplete_names_comple": "This can't be marked done yet: {count} still incomplete ({names}). Complete or remove the incomplete milestones, then mark it done.",
33746
+ "ui.projects.project_model.this_can_t_be_marked_done_yet_milestonesare_count_still_incomplet": "This can't be marked done yet: {milestonesAre_count} still incomplete ({clause}). Complete or remove the incomplete milestones, then mark it done.",
33747
+ "ui.projects.project_model.today": "Today",
33748
+ "ui.projects.project_model.unknown": "Unknown",
33749
+ "ui.projects.project_model.upcoming": "Upcoming",
33750
+ "ui.projects.project_model.validation": "Validation",
33751
+ "ui.projects.project_model.value_d": "{value}d",
33752
+ "ui.projects.project_model.value_pt": "{value} pt",
33753
+ "ui.projects.project_model.wedged": "Wedged",
33754
+ "ui.projects.project_model.yesterday": "Yesterday",
33755
+ "ui.projects.project_properties.add": "Add",
33756
+ "ui.projects.project_properties.completed": "Completed",
33757
+ "ui.projects.project_properties.estimate": "Estimate",
33758
+ "ui.projects.project_properties.no_dates_estimate_tags_owner_or_team_yet": "No dates, estimate, tags, owner or team yet.",
33759
+ "ui.projects.project_properties.owner": "Owner",
33760
+ "ui.projects.project_properties.properties": "Properties",
33761
+ "ui.projects.project_properties.start_date": "Start date",
33762
+ "ui.projects.project_properties.tags": "Tags",
33763
+ "ui.projects.project_properties.target_date": "Target date",
33764
+ "ui.projects.project_properties.team": "Team",
33765
+ "ui.projects.project_properties.updated": "Updated",
33766
+ "ui.projects.project_quick_send.choose_a_session_to_send_to": "Choose a session to send to.",
33767
+ "ui.projects.project_quick_send.message_the_session_paste_an_image_to_attach_it": "Message the session — paste an image to attach it",
33768
+ "ui.projects.project_quick_send.no_session_selected": "No session selected",
33769
+ "ui.projects.project_quick_send.quick_send_follows_the_conversation_s_directory": "Quick send follows the conversation's directory.",
33770
+ "ui.projects.project_quick_send.select_the_session_to_message": "Select the session to message",
33771
+ "ui.projects.project_quick_send.send_to": "Send to",
33772
+ "ui.projects.project_quick_send.sending": "Sending…",
33773
+ "ui.projects.project_quick_send.the_session_is_working_this_message_steers_the_running_turn": "The session is working — this message steers the running turn.",
33774
+ "ui.projects.project_refusals.this_project_could_not_be_found_it_may_have_been_deleted": "This project could not be found. It may have been deleted.",
33775
+ "ui.projects.project_request_update_button.request_update": "Request update",
33776
+ "ui.projects.project_request_update_button.requested": "Requested",
33777
+ "ui.projects.project_request_update_button.requesting": "Requesting…",
33778
+ "ui.projects.project_search.searches_names_descriptions_tags_owners_and_teams_update_text_is": "Searches names, descriptions, tags, owners and teams. Update text is not searched. Clearing the search and filters restores the list.",
33779
+ "ui.projects.project_search.searches_names_descriptions_tags_owners_teams_and_update_text_cle": "Searches names, descriptions, tags, owners, teams and update text. Clearing the search and filters restores the list.",
33780
+ "ui.projects.project_sort.a_to_z": "A to Z",
33781
+ "ui.projects.project_sort.archived_first": "Archived first",
33782
+ "ui.projects.project_sort.days_first": "days first",
33783
+ "ui.projects.project_sort.default_as_listed": "Default (as listed)",
33784
+ "ui.projects.project_sort.estimate": "Estimate",
33785
+ "ui.projects.project_sort.fewest_first": "fewest first",
33786
+ "ui.projects.project_sort.join_and_length_1_cleared": "{join} and {length___1} cleared.",
33787
+ "ui.projects.project_sort.latest_first": "latest first",
33788
+ "ui.projects.project_sort.least_complete_first": "least complete first",
33789
+ "ui.projects.project_sort.live": "Live",
33790
+ "ui.projects.project_sort.milestones": "Milestones",
33791
+ "ui.projects.project_sort.most_complete_first": "most complete first",
33792
+ "ui.projects.project_sort.most_first": "most first",
33793
+ "ui.projects.project_sort.most_recent_first": "most recent first",
33794
+ "ui.projects.project_sort.most_stale_first": "most stale first",
33795
+ "ui.projects.project_sort.parts_0_cleared": "{parts_0} cleared.",
33796
+ "ui.projects.project_sort.planning_first": "Planning first",
33797
+ "ui.projects.project_sort.points_first": "points first",
33798
+ "ui.projects.project_sort.progress": "Progress",
33799
+ "ui.projects.project_sort.project": "Project",
33800
+ "ui.projects.project_sort.soonest_first": "soonest first",
33801
+ "ui.projects.project_sort.sort_cleared": "Sort cleared.",
33802
+ "ui.projects.project_sort.sorted_by_key_direction": "Sorted by {key}, {direction}.",
33803
+ "ui.projects.project_sort.status": "Status",
33804
+ "ui.projects.project_sort.target": "Target",
33805
+ "ui.projects.project_sort.z_to_a": "Z to A",
33806
+ "ui.projects.project_start_session.a_plain_session_assign_a_team_or_agent_later": "A plain session; assign a team or agent later.",
33807
+ "ui.projects.project_start_session.agents": "Agents",
33808
+ "ui.projects.project_start_session.cancel": "Cancel",
33809
+ "ui.projects.project_start_session.loading_teams_and_agents": "Loading teams and agents",
33810
+ "ui.projects.project_start_session.nothing_in_particular": "Nothing in particular",
33811
+ "ui.projects.project_start_session.plain": "Plain",
33812
+ "ui.projects.project_start_session.search_teams_and_agents": "Search teams and agents",
33813
+ "ui.projects.project_start_session.start_a_session": "Start a session",
33814
+ "ui.projects.project_start_session.start_session": "Start session",
33815
+ "ui.projects.project_start_session.team_manager_manager": "Team · manager: {manager}",
33816
+ "ui.projects.project_start_session.teams": "Teams",
33817
+ "ui.projects.project_start_session.the_session_could_not_be_started": "The session could not be started.",
33818
+ "ui.projects.project_start_session.the_session_starts_now_links_itself_to_this_project_and_opens_wit": "The session starts now, links itself to this project, and opens with a prompt you can edit before sending.",
33819
+ "ui.projects.project_start_session.this_server_does_not_offer_the_team_or_agent_catalogues_yet_so_on": "This server does not offer the team or agent catalogues yet, so only a plain session can be started.",
33820
+ "ui.projects.project_start_session.work_with": "Work with",
33821
+ "ui.projects.project_timeline.days": "Days",
33822
+ "ui.projects.project_timeline.length_dated_length_2_without_dates_value3": "{length} dated · {length_2} without dates{value3}",
33823
+ "ui.projects.project_timeline.loading_milestones_for_pendingdetails": " · loading milestones for {pendingDetails}…",
33824
+ "ui.projects.project_timeline.months": "Months",
33825
+ "ui.projects.project_timeline.quarters": "Quarters",
33826
+ "ui.projects.project_timeline.set_a_start_date_a_target_date_or_a_milestone_date_and_it_will_ap": "Set a start date, a target date or a milestone date and it will appear on the timeline.",
33827
+ "ui.projects.project_timeline.try_again": "Try again",
33828
+ "ui.projects.project_timeline.weeks": "Weeks",
33829
+ "ui.projects.project_timeline.zoom_in": "Zoom in",
33830
+ "ui.projects.project_timeline.zoom_in_finer": "Zoom in (finer)",
33831
+ "ui.projects.project_timeline.zoom_out": "Zoom out",
33832
+ "ui.projects.project_timeline.zoom_out_coarser": "Zoom out (coarser)",
33833
+ "ui.projects.project_todos.no_to_do_snapshots_from_the_linked_sessions_yet_a_session_publish": "No to-do snapshots from the linked sessions yet. A session publishes its list as it works, and it appears here once it has.",
33834
+ "ui.projects.project_todos.to_dos": "To-dos",
33835
+ "ui.projects.project_updates.attachment": "Attachment",
33836
+ "ui.projects.project_updates.file_actions_for_name": "File actions for {name}",
33837
+ "ui.projects.project_updates.loading": "Loading ",
33838
+ "ui.projects.project_updates.no_updates_yet_progress_reported_by_you_or_by_the_sessions_workin": "No updates yet. Progress reported by you or by the sessions working on this project is appended here.",
33839
+ "ui.projects.project_updates.open_name": "Open {name}",
33840
+ "ui.projects.project_updates.updates": "Updates",
33841
+ "ui.projects.projects_page.checking_the_server_s_projects_support": "Checking the server's Projects support",
33842
+ "ui.projects.projects_page.clear_all": "Clear all",
33843
+ "ui.projects.projects_page.create_one_here_or_ask_an_agent_to_create_one_and_link_this_sessi": "Create one here, or ask an agent to create one and link this session.",
33844
+ "ui.projects.projects_page.length_of_length_2_in_window": "{length} of {length_2} in window",
33845
+ "ui.projects.projects_page.length_of_length_2_projects": "{length} of {length_2, plural, one {{length_2, number, ::group-off} project} other {{length_2, number, ::group-off} projects}}",
33846
+ "ui.projects.projects_page.loading_projects": "Loading projects…",
33847
+ "ui.projects.projects_page.moved_to_label": "Moved to {label}",
33848
+ "ui.projects.projects_page.new_project": "New project",
33849
+ "ui.projects.projects_page.no_projects_match": "No projects match.",
33850
+ "ui.projects.projects_page.no_projects_match_trim": 'No projects match "{trim}".',
33851
+ "ui.projects.projects_page.no_projects_yet": "No projects yet.",
33852
+ "ui.projects.projects_page.older_projects_are_hidden_by_the_window": "Older projects are hidden by the window.",
33853
+ "ui.projects.projects_page.open_project": "Open project",
33854
+ "ui.projects.projects_page.project_deleted": "Project deleted",
33855
+ "ui.projects.projects_page.project_label_created": "Project {label} created",
33856
+ "ui.projects.projects_page.project_label_was_created_but_the_extra_fields_were_not_saved_val": "Project {label} was created, but the extra fields were not saved: {value2} Open the project to set them in place.",
33857
+ "ui.projects.projects_page.projects": "Projects",
33858
+ "ui.projects.projects_page.refresh_projects": "Refresh projects",
33859
+ "ui.projects.projects_page.searching": "Searching…",
33860
+ "ui.projects.projects_page.show_all_time": "Show all time",
33861
+ "ui.projects.projects_page.the_local_operator_server_is_older_than_this_app_expects_so_proje": "The Local Operator server is older than this app expects, so Projects are unavailable. Update the server and try again.",
33862
+ "ui.projects.projects_page.the_projects_could_not_be_read": "The projects could not be read.",
33863
+ "ui.projects.projects_page.the_server_refused_them": "the server refused them.",
33864
+ "ui.projects.projects_page.the_server_s_capabilities_could_not_be_read_so_projects_are_unava": "The server's capabilities could not be read, so Projects are unavailable.",
33865
+ "ui.projects.projects_page.this_app_is_not_paired_with_the_local_operator_server_so_projects": "This app is not paired with the Local Operator server, so Projects are unavailable.",
33866
+ "ui.projects.projects_page.try_again": "Try again",
33867
+ "ui.projects.projects_page.try_removing_a_filter_clearing_the_filters_restores_the_list": "Try removing a filter. Clearing the filters restores the list.",
33868
+ "ui.projects.projects_page.view_project": "View project",
33869
+ "ui.projects.projects_page.workstreams_you_and_your_agents_track_across_sessions": "Workstreams you and your agents track across sessions.",
33870
+ "ui.projects.projects_toolbar.clear_all": "Clear all",
33871
+ "ui.projects.projects_toolbar.clear_search": "Clear search",
33872
+ "ui.projects.projects_toolbar.facet_labels_facet_first": "{FACET_LABELS_facet} · {first}",
33873
+ "ui.projects.projects_toolbar.facet_labels_facet_first_length_1": "{FACET_LABELS_facet} · {first} +{length___1}",
33874
+ "ui.projects.projects_toolbar.filters": "Filters",
33875
+ "ui.projects.projects_toolbar.remove_filter_facet_labels_facet_join": "Remove filter: {FACET_LABELS_facet} · {join}",
33876
+ "ui.projects.projects_toolbar.remove_sort_key_direction": "Remove sort: {key}, {direction}",
33877
+ "ui.projects.projects_toolbar.search_projects": "Search projects",
33878
+ "ui.projects.projects_toolbar.sort_key": "Sort: {key}",
33879
+ "ui.projects.projects_view_switcher.board": "Board",
33880
+ "ui.projects.projects_view_switcher.list": "List",
33881
+ "ui.projects.projects_view_switcher.project_view": "Project view",
33882
+ "ui.projects.projects_view_switcher.timeline": "Timeline",
33883
+ "ui.projects.request_update.ask_the_sessions_linked_to_this_project_to_post_a_progress_update": "Ask the sessions linked to this project to post a progress update",
33884
+ "ui.projects.request_update.could_not_confirm_delivery_on_display_the_requests_may_still_reac": "Could not confirm delivery on {display} — the requests may still reach its sessions.",
33885
+ "ui.projects.request_update.could_not_reach_any_of_the_total_linked_sessions_on_display": "Could not reach any of the {total, plural, one {{total, number, ::group-off} linked session} other {{total, number, ::group-off} linked sessions}} on {display}.",
33886
+ "ui.projects.request_update.could_not_reach_failed_of_the_total_linked_sessions_on_display_de": "Could not reach {failed} of the {total, plural, one {{total, number, ::group-off} linked session} other {{total, number, ::group-off} linked sessions}} on {display}. Delivery to {value4} could not be confirmed.",
33887
+ "ui.projects.request_update.delivered": "{delivered, plural, one {Requested an update from {delivered, number, ::group-off} session on {display}.} other {Requested updates from {delivered, number, ::group-off} sessions on {display}.}}",
33888
+ "ui.projects.request_update.delivery_to_value1_could_not_be_confirmed": " Delivery to {value1} could not be confirmed.",
33889
+ "ui.projects.request_update.names_0_and_names_1": "{names_0} and {names_1}",
33890
+ "ui.projects.request_update.names_0_names_1_and_length_2_more": "{names_0}, {names_1} and {length___2} more",
33891
+ "ui.projects.request_update.never_started": "{total, plural, one {The linked session has not started yet — it becomes a recipient after its first message.} other {The {total, number, ::group-off} linked sessions have not started yet — they become recipients after their first message.}}",
33892
+ "ui.projects.request_update.no_linked_sessions_to_ask_link_a_session_to_display_first": "No linked sessions to ask. Link a session to {display} first.",
33893
+ "ui.projects.request_update.requested_updates_from_delivered_of_total_sessions_on_display": "Requested updates from {delivered} of {total, plural, one {{total, number, ::group-off} session} other {{total, number, ::group-off} sessions}} on {display}.",
33894
+ "ui.projects.request_update.requesting_updates": "Requesting updates…",
33895
+ "ui.projects.request_update.update_already_requested_ago_s_ago_on_display_try_again_in_left_s": "Update already requested {ago} s ago on {display}. Try again in {left} s.",
33896
+ "ui.projects.request_update.value1_could_not_be_reached": " {value1} could not be reached.",
33897
+ "ui.projects.timeline.read_failed": "Milestones could not be read for {count, plural, one {{count, number, ::group-off} project} other {{count, number, ::group-off} projects}}.",
33898
+ "ui.projects.use_request_update.could_not_request_updates_endedsentence_message": "Could not request updates: {endedSentence_message}",
33899
+ "ui.projects.use_request_update.the_request_could_not_be_confirmed": "The request could not be confirmed."
33900
+ };
33332
33901
  const enUiProviders = {
33333
33902
  "ui.providers.phone.account": "Account: {identity}, credential {id}",
33334
33903
  "ui.providers.phone.account_unlabeled": "Account: credential {id}",
@@ -33734,6 +34303,32 @@ const enUiSettingsAppearance = {
33734
34303
  "ui.settings.appearance.transcript_display_mode_setting.by_turn": "By turn",
33735
34304
  "ui.settings.appearance.transcript_display_mode_setting.by_response": "By response"
33736
34305
  };
34306
+ const enUiSettingsAppearanceWindowGlass = {
34307
+ "ui.settings.appearance.window_glass.label": "Translucent window",
34308
+ "ui.settings.appearance.window_glass.description": "Lets your desktop show through the app window, blurred by the system. Off by default. Text stays readable on every theme: the slider stops before any theme's text gets hard to read.",
34309
+ "ui.settings.appearance.window_glass.restart_needed": "Restart Local Operator to apply this change. The window keeps its current look until then.",
34310
+ "ui.settings.appearance.window_glass.unsupported_reduced_transparency": "Translucent window is unavailable because Reduce transparency is on in your system accessibility settings. Turn it off there and this control will appear.",
34311
+ "ui.settings.appearance.window_glass.unsupported_windows_too_old": "Translucent window needs Windows 11 version 22H2 or later.",
34312
+ "ui.settings.appearance.window_glass.unsupported_linux": "Translucent window is not available on Linux: there is no system blur an app can ask for, and a see-through window without one would show the desktop's text through the app's.",
34313
+ "ui.settings.appearance.window_glass.unsupported_other": "Translucent window is not available on this system.",
34314
+ "ui.settings.appearance.window_glass.coverage_label": "Glass applies to",
34315
+ "ui.settings.appearance.window_glass.coverage_description": "Which parts of the window go translucent. Sidebars only leaves the conversation and pages solid. Full app also covers them and the side panels; web pages, documents and images shown inside stay solid.",
34316
+ "ui.settings.appearance.window_glass.coverage_sidebars": "Sidebars only",
34317
+ "ui.settings.appearance.window_glass.coverage_full": "Full app",
34318
+ "ui.settings.appearance.window_glass.intensity_label": "Frosted to see-through",
34319
+ "ui.settings.appearance.window_glass.intensity_description": "Left is frosted: mostly solid with a hint of the desktop. Right is see-through, as clear as every theme's text allows. Message blocks, inputs and code stay solid either way.",
34320
+ "ui.settings.appearance.window_glass.material_label": "Material",
34321
+ "ui.settings.appearance.window_glass.material_description": "The system material behind the app. It also sets how far see-through can go.",
34322
+ "ui.settings.appearance.window_glass.material_window": "Window",
34323
+ "ui.settings.appearance.window_glass.material_menu": "Menu",
34324
+ "ui.settings.appearance.window_glass.material_popover": "Popover",
34325
+ "ui.settings.appearance.window_glass.material_mica": "Mica",
34326
+ "ui.settings.appearance.window_glass.material_acrylic": "Acrylic",
34327
+ "ui.settings.appearance.window_glass.material_tabbed": "Tabbed",
34328
+ "ui.settings.appearance.window_glass.intensity_start": "Frosted",
34329
+ "ui.settings.appearance.window_glass.intensity_end": "See-through",
34330
+ "ui.settings.appearance.window_glass.intensity_value": "{value}% toward see-through"
34331
+ };
33737
34332
  const enUiSettingsConfiguration = {
33738
34333
  "ui.settings.configuration.backend_setting_row.read_only": "Read-only",
33739
34334
  "ui.settings.configuration.backend_setting_row.use_default": "Use default",
@@ -34520,6 +35115,368 @@ const frUiOnboarding = {
34520
35115
  "ui.onboarding.modal.step_of": "Étape {current, number, ::group-off} sur {total, number, ::group-off}",
34521
35116
  "ui.onboarding.modal.steps_total": "{total, plural, one {{total, number, ::group-off} étape} many {{total, number, ::group-off} d’étapes} other {{total, number, ::group-off} étapes}}"
34522
35117
  };
35118
+ const frUiSettingsAccount = {
35119
+ "ui.settings.account.radient_account_section.status": "Statut",
35120
+ "ui.settings.account.radient_account_section.connected": "Connecté",
35121
+ "ui.settings.account.radient_account_section.name": "Nom",
35122
+ "ui.settings.account.radient_account_section.email": "Adresse e-mail",
35123
+ "ui.settings.account.radient_account_section.account_id": "ID du compte",
35124
+ "ui.settings.account.radient_account_section.tenant_id": "ID de l’organisation",
35125
+ "ui.settings.account.radient_account_section.provider": "Fournisseur",
35126
+ "ui.settings.account.radient_account_section.created": "Création",
35127
+ "ui.settings.account.radient_account_section.need_to_sign_out_or_switch_accounts": "Vous souhaitez vous déconnecter ou changer de compte ?",
35128
+ "ui.settings.account.radient_account_section.sign_out_from_radient": "Se déconnecter de Radient",
35129
+ "ui.settings.account.radient_account_section.sign_in_to_access_your_account_details_or_sign_up_to_get_free_cre": "Connectez-vous pour consulter votre compte, ou inscrivez-vous pour obtenir des crédits gratuits et accéder aux modèles, aux outils et à d’autres fonctionnalités avec Radient Pass. Le routeur automatique de Radient choisit le modèle le plus adapté à vos agents pour équilibrer coût et performance. Grâce à l’optimisation automatique des coûts, Radient Pass revient souvent moins cher que le recours à des fournisseurs d’IA séparés.",
35130
+ "ui.settings.account.radient_account_section.loading_account": "Chargement du compte",
35131
+ "ui.settings.account.radient_account_section.loading_your_radient_account_details": "Chargement de votre compte Radient…",
35132
+ "ui.settings.account.radient_account_section.not_provided": "Non renseigné",
35133
+ "ui.settings.account.radient_account_section.radient_refused_the_sign_in_this_app_is_holding_so_your_account_d": "Radient a refusé les identifiants de connexion enregistrés dans cette application. Les informations de votre compte n’ont donc pas pu être lues. Reconnectez-vous ci-dessous pour remplacer ces identifiants.",
35134
+ "ui.settings.account.radient_account_section.your_radient_account_could_not_be_read_so_this_app_cannot_show_yo": "Votre compte Radient n’a pas pu être lu. L’application ne peut donc pas en afficher les informations.",
35135
+ "ui.settings.account.radient_account_section.you_are_not_currently_signed_in_to_radient": "Vous n’êtes pas connecté à Radient.",
35136
+ "ui.settings.account.settings_page.radient_pass": "Radient Pass",
35137
+ "ui.settings.account.settings_page.available_credits": "Crédits disponibles",
35138
+ "ui.settings.account.settings_page.add_credits": "Ajouter des crédits",
35139
+ "ui.settings.account.settings_page.usage_last_30_days": "Utilisation (30 derniers jours)",
35140
+ "ui.settings.account.settings_page.usage_metric": "Mesure de l’utilisation",
35141
+ "ui.settings.account.settings_page.no_usage_recorded_in_the_last_30_days": "Aucune utilisation enregistrée sur les 30 derniers jours.",
35142
+ "ui.settings.account.settings_page.radient_account": "Compte Radient",
35143
+ "ui.settings.account.settings_page.go_to_radient_console": "Ouvrir la console Radient",
35144
+ "ui.settings.account.settings_page.your_radient_account_radient_pass_details_and_credits_to_use_radi": "Votre compte Radient, les informations de Radient Pass et vos crédits. Pour utiliser les modèles Radient, connectez-vous dans Fournisseurs de modèles.",
35145
+ "ui.settings.account.settings_page.credits": "Crédits",
35146
+ "ui.settings.account.settings_page.tokens": "Tokens",
35147
+ "ui.settings.account.settings_usage_chart.credits_consumed": "Crédits consommés",
35148
+ "ui.settings.account.settings_usage_chart.tokens_used": "Tokens utilisés",
35149
+ "ui.settings.account.settings_usage_chart.credits_summary": "Crédits consommés sur les 30 derniers jours, avec un point par jour sur {days, plural, one {{days, number, ::group-off} jour} many {{days, number, ::group-off} de jours} other {{days, number, ::group-off} jours}}.",
35150
+ "ui.settings.account.settings_usage_chart.tokens_summary": "Tokens utilisés sur les 30 derniers jours, avec un point par jour sur {days, plural, one {{days, number, ::group-off} jour} many {{days, number, ::group-off} de jours} other {{days, number, ::group-off} jours}}.",
35151
+ "ui.settings.account.settings_page.credit_balance_load_failed": "Impossible de charger votre solde de crédits. {reason}",
35152
+ "ui.settings.account.settings_page.usage_load_failed": "Impossible de charger vos données d’utilisation. {reason}"
35153
+ };
35154
+ const frUiSettingsAppearance = {
35155
+ "ui.settings.appearance.settings_page.appearance": "Apparence",
35156
+ "ui.settings.appearance.settings_page.customize_the_look_and_feel_of_local_operator": "Personnalisez l’apparence de Local Operator",
35157
+ "ui.settings.appearance.settings_page.show_agent_reasoning": "Afficher le raisonnement des agents",
35158
+ "ui.settings.appearance.settings_page.adds_the_agent_s_reasoning_and_thinking_rows_to_conversations_the": "Ajoute les lignes Reasoning et Thinking de l’agent aux conversations. Elles restent repliées tant que vous ne les ouvrez pas. Ce réglage ne concerne que le raisonnement : les commentaires rédigés par l’agent pendant son tour font partie de la transcription. Aucun mode d’affichage ne les supprime — Par tour les replie derrière les barres du tour, Par réponse les garde à l’écran.",
35159
+ "ui.settings.appearance.theme_selector.dark": "Sombre",
35160
+ "ui.settings.appearance.theme_selector.light": "Clair",
35161
+ "ui.settings.appearance.transcript_display_mode_setting.transcript_display": "Affichage de la transcription",
35162
+ "ui.settings.appearance.transcript_display_mode_setting.by_turn_condenses_each_turn_to_its_answer_by_response_keeps_every": "Par tour ne garde que la réponse finale de chaque tour. Par réponse garde chaque réponse terminée à l’écran, tout en signalant la réponse finale du tour.",
35163
+ "ui.settings.appearance.transcript_display_mode_setting.by_turn": "Par tour",
35164
+ "ui.settings.appearance.transcript_display_mode_setting.by_response": "Par réponse"
35165
+ };
35166
+ const frUiSettingsConfiguration = {
35167
+ "ui.settings.configuration.backend_setting_row.read_only": "Lecture seule",
35168
+ "ui.settings.configuration.backend_setting_row.use_default": "Rétablir",
35169
+ "ui.settings.configuration.backend_setting_row.set_in_the_credential_manager_this_value_carries_inline_credentia": "À définir dans le gestionnaire d’identifiants : cette valeur contient des identifiants intégrés ou des paramètres de requête.",
35170
+ "ui.settings.configuration.backend_setting_row.retry": "Réessayer",
35171
+ "ui.settings.configuration.backend_setting_row.saving": "Enregistrement",
35172
+ "ui.settings.configuration.backend_setting_row.save": "Enregistrer",
35173
+ "ui.settings.configuration.backend_setting_row.not_set": "Non défini",
35174
+ "ui.settings.configuration.backend_setting_row.use_default_for_label": "Rétablir la valeur par défaut pour {label}",
35175
+ "ui.settings.configuration.backend_settings_drafts.enter_a_whole_number": "Saisissez un nombre entier.",
35176
+ "ui.settings.configuration.backend_settings_drafts.enter_a_finite_number": "Saisissez un nombre fini.",
35177
+ "ui.settings.configuration.backend_settings_drafts.nothing_has_been_edited_yet": "Aucune modification pour le moment.",
35178
+ "ui.settings.configuration.backend_settings_section.searchable_settings_need_a_newer_local_operator_server_update_the": "La recherche de paramètres nécessite un serveur Local Operator plus récent. Mettez le serveur à jour et redémarrez l’application pour gérer ces paramètres ici.",
35179
+ "ui.settings.configuration.backend_settings_section.loading_settings": "Chargement des paramètres",
35180
+ "ui.settings.configuration.backend_settings_section.no_settings_match_this_search_clear_the_search_field_to_see_every": "Aucun paramètre ne correspond à cette recherche. Effacez la recherche pour tous les afficher.",
35181
+ "ui.settings.configuration.backend_settings_section.takes_effect_immediately": "Effet immédiat",
35182
+ "ui.settings.configuration.backend_settings_section.takes_effect_the_next_time_the_app_starts": "Effet au prochain démarrage de l’application",
35183
+ "ui.settings.configuration.backend_settings_section.takes_effect_for_new_conversations": "Effet sur les nouvelles conversations",
35184
+ "ui.settings.configuration.backend_settings_section.the_setting_could_not_be_saved": "Le paramètre n’a pas pu être enregistré.",
35185
+ "ui.settings.configuration.backend_settings_section.the_setting_could_not_be_reset": "Le paramètre n’a pas pu être réinitialisé.",
35186
+ "ui.settings.configuration.backend_settings_section.your_settings_could_not_be_loaded": "Vos paramètres n’ont pas pu être chargés.",
35187
+ "ui.settings.configuration.backend_settings_section.retry": "Réessayer",
35188
+ "ui.settings.configuration.backend_settings_section.advanced_settings_are_hidden_here": "Les paramètres avancés sont masqués ici.",
35189
+ "ui.settings.configuration.backend_settings_section.nothing_in_this_section_matches": "Aucun résultat dans cette section.",
35190
+ "ui.settings.configuration.delegated_cleanup_notice.open_settings": "Ouvrir les paramètres",
35191
+ "ui.settings.configuration.delegated_cleanup_notice.dismiss_this_notice": "Masquer cet avis",
35192
+ "ui.settings.configuration.delegated_retention_copy.sessions_started_by_subagents_agent_shells_and_background_runs_su": "les sessions lancées par des sous-agents, des terminaux d’agents et des tâches en arrière-plan comme",
35193
+ "ui.settings.configuration.delegated_retention_copy.never_your_own_conversations_or_the_workstreams_in_your_sidebar": ". Jamais vos propres conversations ni les projets de votre barre latérale.",
35194
+ "ui.settings.configuration.delegated_retention_copy.anything_running_or_waiting_anything_whose_parent_conversation_wa": "tout ce qui est en cours ou en attente, tout ce dont la conversation parente a été active récemment, tout ce qui est lié à un projet ouvert, et les dossiers contenant du travail Git non enregistré.",
35195
+ "ui.settings.configuration.delegated_retention_copy.after_the_time_below_with_no_activity_checked_when_the_app_starts": "après la durée d’inactivité indiquée ci-dessous. La vérification a lieu au démarrage de l’application, par lots limités ; un grand nombre de sessions peut donc nécessiter plusieurs démarrages.",
35196
+ "ui.settings.configuration.language_dialog.the_language_could_not_be_saved": "La langue n’a pas pu être enregistrée.",
35197
+ "ui.settings.configuration.language_dialog.your_settings_could_not_be_loaded": "Vos paramètres n’ont pas pu être chargés.",
35198
+ "ui.settings.configuration.retention_duration.enter_a_whole_number_of_hours_or_days": "Saisissez un nombre entier d’heures ou de jours.",
35199
+ "ui.settings.configuration.retention_duration.month_count": "{count, plural, one {{count, number, ::group-off} mois} many {{count, number, ::group-off} de mois} other {{count, number, ::group-off} mois}}",
35200
+ "ui.settings.configuration.retention_duration.day_count": "{count, plural, one {{count, number, ::group-off} jour} many {{count, number, ::group-off} de jours} other {{count, number, ::group-off} jours}}",
35201
+ "ui.settings.configuration.retention_duration.hour_count": "{count, plural, one {{count, number, ::group-off} heure} many {{count, number, ::group-off} d’heures} other {{count, number, ::group-off} heures}}",
35202
+ "ui.settings.configuration.retention_duration.maximum_days": "{duration} ({days, plural, one {{days, number, ::group-off} jour} many {{days, number, ::group-off} de jours} other {{days, number, ::group-off} jours}})",
35203
+ "ui.settings.configuration.retention_duration.range": "entre {minimum} et {maximum}",
35204
+ "ui.settings.configuration.retention_duration.too_long": "Durée trop longue : {duration}. Choisissez une durée {range}.",
35205
+ "ui.settings.configuration.retention_duration.too_short": "Durée trop courte : {duration}. Choisissez une durée {range}.",
35206
+ "ui.settings.configuration.retention_duration_control.exact_time": "Durée exacte",
35207
+ "ui.settings.configuration.retention_duration_control.hours": "heures",
35208
+ "ui.settings.configuration.retention_duration_control.days": "jours",
35209
+ "ui.settings.configuration.retention_duration_control.label_common_choices": "{label} : durées courantes",
35210
+ "ui.settings.configuration.retention_duration_control.label_unit": "{label} : unité",
35211
+ "ui.settings.configuration.setting_combobox.could_not_list_models": "Impossible de lister les modèles.",
35212
+ "ui.settings.configuration.setting_combobox.could_not_list_providers": "Impossible de lister les fournisseurs",
35213
+ "ui.settings.configuration.setting_combobox.no_providers": "Aucun fournisseur",
35214
+ "ui.settings.configuration.setting_combobox.provider_list_unavailable": "Liste des fournisseurs indisponible",
35215
+ "ui.settings.configuration.setting_combobox.could_not_list_models_2": "Impossible de lister les modèles",
35216
+ "ui.settings.configuration.setting_combobox.nothing_matches_that_model": "Aucun modèle correspondant",
35217
+ "ui.settings.configuration.setting_combobox.model_list_unavailable": "Liste des modèles indisponible",
35218
+ "ui.settings.configuration.setting_combobox.loading_providers": "Chargement des fournisseurs",
35219
+ "ui.settings.configuration.setting_combobox.loading_models": "Chargement des modèles",
35220
+ "ui.settings.configuration.setting_combobox.use_text": "Utiliser « {text} »",
35221
+ "ui.settings.configuration.setting_control.press_the_keys_you_want_esc_cancels": "Appuyez sur les touches souhaitées ; Esc annule.",
35222
+ "ui.settings.configuration.setting_control.one_hop_per_line_as_provider_model_effort_an_empty_chain_moves_to": "Une étape par ligne, au format provider/model (effort). Une chaîne vide passe au fournisseur suivant.",
35223
+ "ui.settings.configuration.setting_control.label_press_the_key_you_want": "{label} : appuyez sur la touche souhaitée",
35224
+ "ui.settings.configuration.settings_filter_bar.search_settings_by_name_description_or_key": "Rechercher par nom, description ou clé",
35225
+ "ui.settings.configuration.settings_filter_bar.search_settings": "Rechercher des paramètres",
35226
+ "ui.settings.configuration.settings_filter_bar.clear_search": "Effacer la recherche",
35227
+ "ui.settings.configuration.settings_filter_bar.settings_filters": "Filtres des paramètres",
35228
+ "ui.settings.configuration.settings_filter_bar.modified": "Modifiés",
35229
+ "ui.settings.configuration.settings_filter_bar.show_advanced": "Afficher les avancés",
35230
+ "ui.settings.configuration.settings_filter_bar.discard_all": "Tout annuler",
35231
+ "ui.settings.configuration.settings_filter_bar.expand_all": "Tout déplier",
35232
+ "ui.settings.configuration.settings_filter_bar.collapse_all": "Tout replier",
35233
+ "ui.settings.configuration.settings_filter_bar.saving": "Enregistrement",
35234
+ "ui.settings.configuration.settings_filter_bar.save_all": "Tout enregistrer",
35235
+ "ui.settings.configuration.settings_filter_bar.unsaved_count": "{count, plural, one {{count, number, ::group-off} modification non enregistrée} many {{count, number, ::group-off} de modifications non enregistrées} other {{count, number, ::group-off} modifications non enregistrées}}",
35236
+ "ui.settings.configuration.settings_filter_bar.search_count": "{matchCount, plural, one {{matchCount, number, ::group-off} résultat} many {{matchCount, number, ::group-off} de résultats} other {{matchCount, number, ::group-off} résultats}} dans {sectionCount, plural, one {{sectionCount, number, ::group-off} section} many {{sectionCount, number, ::group-off} de sections} other {{sectionCount, number, ::group-off} sections}}",
35237
+ "ui.settings.configuration.settings_filter_bar.modified_count": "{count, plural, one {{count, number, ::group-off} paramètre modifié} many {{count, number, ::group-off} de paramètres modifiés} other {{count, number, ::group-off} paramètres modifiés}}",
35238
+ "ui.settings.configuration.settings_group_header.changed_from_the_default": "Diffère de la valeur par défaut",
35239
+ "ui.settings.configuration.settings_group_header.setting_count": "{count, plural, one {{count, number, ::group-off} paramètre} many {{count, number, ::group-off} de paramètres} other {{count, number, ::group-off} paramètres}}",
35240
+ "ui.settings.configuration.settings_page.configuration_information": "Informations de configuration",
35241
+ "ui.settings.configuration.settings_page.system_information_about_the_current_configuration": "Informations système sur la configuration actuelle.",
35242
+ "ui.settings.configuration.settings_page.version": "Version",
35243
+ "ui.settings.configuration.settings_page.created": "Création",
35244
+ "ui.settings.configuration.settings_page.last_modified": "Dernière modification",
35245
+ "ui.settings.configuration.settings_page.description": "Description",
35246
+ "ui.settings.configuration.settings_page.no_description_available": "Aucune description disponible",
35247
+ "ui.settings.configuration.backend_settings_section.retrying": "Nouvel essai",
35248
+ "ui.settings.configuration.delegated_retention_copy.removed": "Supprimés :",
35249
+ "ui.settings.configuration.delegated_retention_copy.kept": "Conservés :",
35250
+ "ui.settings.configuration.delegated_retention_copy.when": "Quand :",
35251
+ "ui.settings.configuration.backend_setting_row.gate_note": "Nécessite l’activation de {gate}. Rien n’est enregistré ici tant qu’il est désactivé.",
35252
+ "ui.settings.configuration.backend_settings_section.show_advanced_count": "{count, plural, one {Afficher {count, number, ::group-off} avancé} many {Afficher {count, number, ::group-off} d’avancés} other {Afficher {count, number, ::group-off} avancés}}",
35253
+ "ui.settings.configuration.settings_group_header.advanced_count": "{count, plural, one {{count, number, ::group-off} avancé} many {{count, number, ::group-off} d’avancés} other {{count, number, ::group-off} avancés}}",
35254
+ "ui.settings.configuration.retention_duration_control.idle_window_status": "{duration} sans activité{isDefault, select, yes { (par défaut)} other {}}",
35255
+ "ui.settings.configuration.retention_duration_control.use_duration": "Utiliser {duration}",
35256
+ "ui.settings.configuration.retention_duration_control.duration_default": "{duration} (par défaut)",
35257
+ "ui.settings.configuration.settings_filter_bar.advanced_shown": "{count, plural, one {{count, number, ::group-off} paramètre avancé affiché — Tout déplier pour le voir} many {{count, number, ::group-off} de paramètres avancés affichés — Tout déplier pour les voir} other {{count, number, ::group-off} paramètres avancés affichés — Tout déplier pour les voir}}",
35258
+ "ui.settings.configuration.settings_filter_bar.core_and_advanced": "{coreCount, plural, one {{coreCount, number, ::group-off} paramètre courant} many {{coreCount, number, ::group-off} de paramètres courants} other {{coreCount, number, ::group-off} paramètres courants}}, {advancedCount, plural, one {{advancedCount, number, ::group-off} avancé} many {{advancedCount, number, ::group-off} d’avancés} other {{advancedCount, number, ::group-off} avancés}}"
35259
+ };
35260
+ const frUiSettingsIntegrations = {
35261
+ "ui.settings.integrations.add_integration_form.add_integration": "Ajouter une intégration",
35262
+ "ui.settings.integrations.add_integration_form.name": "Nom",
35263
+ "ui.settings.integrations.add_integration_form.e_g_notion": "Ex. : notion",
35264
+ "ui.settings.integrations.add_integration_form.how_it_runs": "Mode d’exécution",
35265
+ "ui.settings.integrations.add_integration_form.local_command": "Commande locale",
35266
+ "ui.settings.integrations.add_integration_form.remote_url": "URL distante",
35267
+ "ui.settings.integrations.add_integration_form.command": "Commande",
35268
+ "ui.settings.integrations.add_integration_form.e_g_npx": "Ex. : npx",
35269
+ "ui.settings.integrations.add_integration_form.arguments": "Arguments",
35270
+ "ui.settings.integrations.add_integration_form.one_per_line": "(un par ligne)",
35271
+ "ui.settings.integrations.add_integration_form.url": "URL",
35272
+ "ui.settings.integrations.add_integration_form.https_mcp_example_com_mcp": "https://mcp.example.com/mcp",
35273
+ "ui.settings.integrations.add_integration_form.if_it_needs_a_sign_in_or_a_key_you_ll_be_asked_after_it_s_added": "Si une connexion ou une clé est nécessaire, elle vous sera demandée après l’ajout.",
35274
+ "ui.settings.integrations.add_integration_form.available_in": "Disponible dans",
35275
+ "ui.settings.integrations.add_integration_form.all_chats": "Toutes les conversations",
35276
+ "ui.settings.integrations.add_integration_form.this_project": "Ce projet",
35277
+ "ui.settings.integrations.add_integration_form.cancel": "Annuler",
35278
+ "ui.settings.integrations.add_integration_form.enter_the_command_to_run": "Saisissez la commande à exécuter.",
35279
+ "ui.settings.integrations.add_integration_form.every_chat_in_any_folder": "Toutes les conversations, quel que soit le dossier.",
35280
+ "ui.settings.integrations.add_integration_form.only_chats_working_in_projectlabel": "Uniquement les conversations dans {projectLabel}.",
35281
+ "ui.settings.integrations.credential_manifest.api_key_for_your_radient_pass_radient_pass_provides_you_unified_a": "Clé API de votre Radient Pass. Radient Pass donne accès aux modèles, aux outils, aux agents, à l’optimisation automatique et à bien d’autres fonctionnalités avec une seule clé. Pour en obtenir une, connectez-vous ci-dessus avec Gmail ou Microsoft.",
35282
+ "ui.settings.integrations.credential_manifest.api_key_for_accessing_openai_models_like_gpt_4o_o3_mini_and_gpt_4": "Clé API pour accéder aux modèles OpenAI comme GPT-4o, o3-mini et GPT-4.5.",
35283
+ "ui.settings.integrations.credential_manifest.api_key_for_openrouter_which_provides_access_to_various_ai_models": "Clé API pour OpenRouter, qui donne accès aux modèles d’IA de différents fournisseurs. Une clé OpenRouter permet d’utiliser plusieurs modèles de ces fournisseurs avec un seul accès.",
35284
+ "ui.settings.integrations.credential_manifest.api_key_for_deepseek_ai_models_specialized_in_code_generation_and": "Clé API pour les modèles d’IA DeepSeek, spécialisés dans la génération et la compréhension de code.",
35285
+ "ui.settings.integrations.credential_manifest.api_key_for_mistral_ai_models_known_for_efficient_and_powerful_la": "Clé API pour les modèles d’IA Mistral, connus pour leur traitement du langage performant et efficace.",
35286
+ "ui.settings.integrations.credential_manifest.api_key_for_kimi_ai_providing_advanced_language_models_with_stron": "Clé API pour Kimi AI, qui propose des modèles de langage avancés dotés de solides capacités de raisonnement.",
35287
+ "ui.settings.integrations.credential_manifest.api_key_for_alibaba_cloud_ai_models_offering_a_range_of_language_": "Clé API pour les modèles d’IA Alibaba Cloud, comme Qwen, avec des capacités de langage et de vision.",
35288
+ "ui.settings.integrations.credential_manifest.api_key_for_google_ai_studio_providing_access_to_gemini_and_other": "Clé API pour Google AI Studio, qui donne accès à Gemini et aux autres modèles d’IA Google.",
35289
+ "ui.settings.integrations.credential_manifest.oauth_2_0_access_token_for_google_apis_used_by_local_operator_for": "Token d’accès OAuth 2.0 aux API Google. Local Operator l’utilise pour authentifier les requêtes aux services Google comme Gmail, Calendar et Drive. Ce token de courte durée est renouvelé automatiquement.",
35290
+ "ui.settings.integrations.credential_manifest.timestamp_in_milliseconds_since_epoch_indicating_when_the_current": "Horodatage en millisecondes depuis l’origine Unix, indiquant l’expiration du token d’accès Google actuel. Utilisé en interne pour gérer son renouvellement.",
35291
+ "ui.settings.integrations.credential_manifest.oauth_2_0_refresh_token_for_google_apis_used_to_obtain_new_access": "Token de renouvellement OAuth 2.0 pour les API Google. Il permet d’obtenir de nouveaux tokens d’accès lorsque le token actuel expire. Sa gestion est sécurisée et automatique.",
35292
+ "ui.settings.integrations.credential_manifest.api_key_for_anthropic_s_claude_models_known_for_agentic_code_gene": "Clé API pour les modèles Claude d’Anthropic, connus pour leur capacité à générer du code via des agents.",
35293
+ "ui.settings.integrations.credential_manifest.api_key_for_search_engine_results_page_api_allowing_access_to_sea": "Clé API pour Search Engine Results Page API, qui donne accès aux données des moteurs de recherche. Elle permet à vos agents de rechercher des informations sur le web.",
35294
+ "ui.settings.integrations.credential_manifest.api_key_for_tavily_a_search_api_designed_specifically_for_ai_appl": "Clé API pour Tavily, une API de recherche conçue pour les applications d’IA. Elle permet à vos agents de rechercher des informations sur le web.",
35295
+ "ui.settings.integrations.credential_manifest.api_key_for_brave_search_an_independent_web_index_with_its_own_cr": "Clé API pour Brave Search, un index web indépendant doté de son propre robot d’exploration. Elle permet à vos agents de rechercher des informations sur le web.",
35296
+ "ui.settings.integrations.credential_manifest.api_key_for_exa_a_search_api_built_for_ai_applications_agents_can": "Clé API pour Exa, une API de recherche conçue pour les applications d’IA. Les agents peuvent utiliser gratuitement l’offre MCP sans clé d’Exa, avec un débit limité ; une clé donne accès à l’API REST et aux résumés des requêtes.",
35297
+ "ui.settings.integrations.credential_manifest.api_key_for_parallel_a_web_search_api_for_ai_agents_agents_can_al": "Clé API pour Parallel, une API de recherche web pour les agents d’IA. Les agents peuvent aussi utiliser l’offre gratuite de Parallel sans clé ; une clé augmente les limites de débit.",
35298
+ "ui.settings.integrations.credential_manifest.api_key_for_perplexity_s_sonar_search_perplexity_is_best_effort_a": "Clé API pour la recherche Sonar de Perplexity. Sa disponibilité varie : les agents peuvent donc se rabattre sur un autre fournisseur.",
35299
+ "ui.settings.integrations.credential_manifest.api_key_for_fal_used_by_agents_for_generating_interpreting_and_un": "Clé API pour FAL, utilisée par les agents pour générer, interpréter et comprendre des images.",
35300
+ "ui.settings.integrations.credential_manifest.api_key_for_xai_providing_access_to_grok_and_other_advanced_xai_m": "Clé API pour xAI, qui donne accès à Grok et aux autres modèles xAI avancés pour les tâches de langage et de raisonnement.",
35301
+ "ui.settings.integrations.credential_manifest.name_openai_api_key": "Clé API OpenAI",
35302
+ "ui.settings.integrations.credential_manifest.name_openrouter_api_key": "Clé API OpenRouter",
35303
+ "ui.settings.integrations.credential_manifest.name_deepseek_api_key": "Clé API DeepSeek",
35304
+ "ui.settings.integrations.credential_manifest.name_mistral_api_key": "Clé API Mistral",
35305
+ "ui.settings.integrations.credential_manifest.name_kimi_api_key": "Clé API Kimi",
35306
+ "ui.settings.integrations.credential_manifest.name_alibaba_cloud_api_key": "Clé API Alibaba Cloud",
35307
+ "ui.settings.integrations.credential_manifest.name_google_ai_studio_api_key": "Clé API Google AI Studio",
35308
+ "ui.settings.integrations.credential_manifest.name_google_access_token": "Token d’accès Google",
35309
+ "ui.settings.integrations.credential_manifest.name_google_token_expiry_timestamp": "Horodatage d’expiration du token Google",
35310
+ "ui.settings.integrations.credential_manifest.name_google_refresh_token": "Token de renouvellement Google",
35311
+ "ui.settings.integrations.credential_manifest.name_anthropic_api_key": "Clé API Anthropic",
35312
+ "ui.settings.integrations.credential_manifest.name_serp_api_key": "Clé API SERP",
35313
+ "ui.settings.integrations.credential_manifest.name_tavily_api_key": "Clé API Tavily",
35314
+ "ui.settings.integrations.credential_manifest.name_brave_api_key": "Clé API Brave",
35315
+ "ui.settings.integrations.credential_manifest.name_exa_api_key": "Clé API Exa",
35316
+ "ui.settings.integrations.credential_manifest.name_parallel_api_key": "Clé API Parallel",
35317
+ "ui.settings.integrations.credential_manifest.name_perplexity_api_key": "Clé API Perplexity",
35318
+ "ui.settings.integrations.credential_manifest.name_fal_api_key": "Clé API FAL",
35319
+ "ui.settings.integrations.credential_manifest.name_xai_api_key": "Clé API xAI",
35320
+ "ui.settings.integrations.integration_key_dialog.cancel": "Annuler",
35321
+ "ui.settings.integrations.integration_key_dialog.the_header_this_server_wants_the_key_in": "En-tête attendu par ce serveur pour la clé",
35322
+ "ui.settings.integrations.integration_key_dialog.e_g_authorization_or_x_api_key": "Ex. : Authorization ou X-Api-Key",
35323
+ "ui.settings.integrations.integration_key_dialog.this_server_declares_no_key_of_its_own_so_local_operator_adds_one": "Ce serveur ne déclare aucune clé. Local Operator en ajoute donc une à sa configuration pour vous.",
35324
+ "ui.settings.integrations.integration_key_dialog.save_and_test": "Enregistrer et tester",
35325
+ "ui.settings.integrations.integration_key_dialog.keys_are_saved_encrypted_on_this_computer_this_one_is_stored_unde": "Les clés sont enregistrées sous forme chiffrée sur cet ordinateur. Celle-ci est stockée sous un nom propre à cette intégration ; aucun autre serveur ne la partage.",
35326
+ "ui.settings.integrations.integration_key_dialog.keys_are_saved_encrypted_on_this_computer_other_integrations_that": "Les clés sont enregistrées sous forme chiffrée sur cet ordinateur. Les intégrations qui utilisent le même nom de clé la partagent.",
35327
+ "ui.settings.integrations.integration_model.just_now": "à l’instant",
35328
+ "ui.settings.integrations.integration_model.signing_in": "Connexion…",
35329
+ "ui.settings.integrations.integration_model.signing_out": "Déconnexion…",
35330
+ "ui.settings.integrations.integration_model.status_unavailable": "Statut indisponible",
35331
+ "ui.settings.integrations.integration_model.not_connected": "Non connecté",
35332
+ "ui.settings.integrations.integration_model.connected": "Connecté",
35333
+ "ui.settings.integrations.integration_model.connecting": "Connexion en cours…",
35334
+ "ui.settings.integrations.integration_model.needs_a_key": "Clé requise",
35335
+ "ui.settings.integrations.integration_model.needs_sign_in": "Connexion requise",
35336
+ "ui.settings.integrations.integration_model.couldn_t_start": "Échec du démarrage",
35337
+ "ui.settings.integrations.integration_model.no_reason_was_given": "Aucune raison fournie.",
35338
+ "ui.settings.integrations.integration_model.signed_out": "Déconnecté",
35339
+ "ui.settings.integrations.integration_model.sign_out_didn_t_finish": "Déconnexion inachevée",
35340
+ "ui.settings.integrations.integration_model.the_sign_in_is_still_saved": "Les identifiants de connexion sont toujours enregistrés.",
35341
+ "ui.settings.integrations.integration_model.sign_in_didn_t_finish": "Connexion inachevée",
35342
+ "ui.settings.integrations.integration_model.local_command": "Commande locale",
35343
+ "ui.settings.integrations.integration_model.remote_url": "URL distante",
35344
+ "ui.settings.integrations.integration_model.claude_code": "Claude Code",
35345
+ "ui.settings.integrations.integration_model.vs_code": "VS Code",
35346
+ "ui.settings.integrations.integration_model.codex_cli": "Codex CLI",
35347
+ "ui.settings.integrations.integration_model.this_project": "Ce projet",
35348
+ "ui.settings.integrations.integration_model.imported_from_a_project_file": "Importé d’un fichier de projet",
35349
+ "ui.settings.integrations.integration_model.continue_sign_in": "Poursuivre la connexion",
35350
+ "ui.settings.integrations.integration_model.check_again": "Vérifier à nouveau",
35351
+ "ui.settings.integrations.integration_model.add_key": "Ajouter une clé",
35352
+ "ui.settings.integrations.integration_model.sign_in": "Se connecter",
35353
+ "ui.settings.integrations.integration_model.sign_in_again": "Se reconnecter",
35354
+ "ui.settings.integrations.integration_model.reconnect": "Rétablir la connexion",
35355
+ "ui.settings.integrations.integration_model.retry": "Réessayer",
35356
+ "ui.settings.integrations.integration_model.sign_out_again": "Réessayer la déconnexion",
35357
+ "ui.settings.integrations.integration_model.try_again": "Réessayer",
35358
+ "ui.settings.integrations.integration_model.cancel": "Annuler",
35359
+ "ui.settings.integrations.integration_model.test_connection": "Tester la connexion",
35360
+ "ui.settings.integrations.integration_model.update_key": "Modifier la clé",
35361
+ "ui.settings.integrations.integration_model.sign_out": "Se déconnecter",
35362
+ "ui.settings.integrations.integration_model.copy_setup_prompt": "Copier le prompt de configuration",
35363
+ "ui.settings.integrations.integration_model.open_config_file": "Ouvrir le fichier de configuration",
35364
+ "ui.settings.integrations.integration_model.remove": "Supprimer",
35365
+ "ui.settings.integrations.integration_model.remove_in_its_own_file": "Supprimer dans son fichier",
35366
+ "ui.settings.integrations.integration_model.defined_in_a_file_this_app_doesn_t_write_remove_it_there": "Défini dans un fichier que cette application ne modifie pas. Supprimez-le dans ce fichier.",
35367
+ "ui.settings.integrations.integration_model.needs_attention": "À vérifier",
35368
+ "ui.settings.integrations.integration_model.give_it_a_name": "Donnez-lui un nom.",
35369
+ "ui.settings.integrations.integration_model.use_letters_numbers_dots_dashes_underscores_or_colons_with_no_spa": "Utilisez des lettres, chiffres, points, tirets, traits de soulignement ou deux-points, sans espaces.",
35370
+ "ui.settings.integrations.integration_model.enter_the_server_s_url": "Saisissez l’URL du serveur.",
35371
+ "ui.settings.integrations.integration_model.enter_a_full_url_like_https_mcp_example_com_mcp": "Saisissez une URL complète, comme https://mcp.example.com/mcp.",
35372
+ "ui.settings.integrations.integration_model.the_url_must_start_with_https_or_http": "L’URL doit commencer par https:// ou http://.",
35373
+ "ui.settings.integrations.integration_model.the_url_needs_a_host_name": "L’URL doit contenir un nom d’hôte.",
35374
+ "ui.settings.integrations.integration_model.remove_the_username_or_password_from_the_url_keys_are_added_after": "Retirez le nom d’utilisateur ou le mot de passe de l’URL. Les clés seront ajoutées après l’enregistrement.",
35375
+ "ui.settings.integrations.integration_model.remove_the_or_part_of_the_url_keys_are_added_after_it_s_saved": "Retirez la partie ? ou # de l’URL. Les clés seront ajoutées après l’enregistrement.",
35376
+ "ui.settings.integrations.integration_model.this_looks_like_two_urls_pasted_together_enter_just_one": "Deux URL semblent avoir été collées à la suite. Saisissez-en une seule.",
35377
+ "ui.settings.integrations.integration_model.that_configuration_isn_t_valid_check_the_command_or_the_url_then_": "Cette configuration n’est pas valide. Vérifiez la commande ou l’URL, puis réessayez.",
35378
+ "ui.settings.integrations.integration_model.that_sign_in_or_test_isn_t_running_any_more_try_again": "Cette connexion ou ce test n’est plus en cours. Réessayez.",
35379
+ "ui.settings.integrations.integration_model.an_integration_with_this_name_already_exists_choose_another_name": "Une intégration porte déjà ce nom. Choisissez-en un autre.",
35380
+ "ui.settings.integrations.integration_model.it_s_defined_in_another_tool_s_config_so_it_can_t_be_changed_here": "Cette intégration est définie dans la configuration d’un autre outil et ne peut pas être modifiée ici. Modifiez-la dans son fichier.",
35381
+ "ui.settings.integrations.integration_model.there_s_no_separate_project_config_here_so_it_can_only_be_added_g": "Ce projet n’a pas de configuration distincte. L’intégration ne peut être ajoutée que pour toutes les conversations.",
35382
+ "ui.settings.integrations.integration_model.it_no_longer_exists_the_list_has_been_refreshed": "Cette intégration n’existe plus. La liste a été actualisée.",
35383
+ "ui.settings.integrations.integration_model.it_doesn_t_use_browser_sign_in": "Cette intégration n’utilise pas la connexion par navigateur.",
35384
+ "ui.settings.integrations.integration_model.a_sign_in_or_test_is_already_running_wait_for_it_to_finish_or_can": "Une connexion ou un test est déjà en cours. Attendez la fin ou annulez-le.",
35385
+ "ui.settings.integrations.integration_model.too_many_sign_ins_and_tests_are_waiting_try_again_in_a_moment": "Trop de connexions et de tests sont en attente. Réessayez dans un instant.",
35386
+ "ui.settings.integrations.integration_model.the_config_file_couldn_t_be_written_check_that_it_isn_t_read_only": "Le fichier de configuration n’a pas pu être enregistré. Vérifiez qu’il n’est pas en lecture seule.",
35387
+ "ui.settings.integrations.integration_model.integrations_are_still_starting_try_again_in_a_moment": "Les intégrations démarrent encore. Réessayez dans un instant.",
35388
+ "ui.settings.integrations.integration_model.the_server_refused_it_so_nothing_was_changed": "Le serveur a refusé la demande. Rien n’a été modifié.",
35389
+ "ui.settings.integrations.integration_model.tool_count": "{count, plural, one {{count, number, ::group-off} outil} many {{count, number, ::group-off} d’outils} other {{count, number, ::group-off} outils}}",
35390
+ "ui.settings.integrations.integration_model.integration_count": "{count, plural, one {{count, number, ::group-off} intégration} many {{count, number, ::group-off} d’intégrations} other {{count, number, ::group-off} intégrations}}",
35391
+ "ui.settings.integrations.integration_model.minutes_min_ago": "{minutes, plural, one {il y a {minutes, number, ::group-off} min} many {il y a {minutes, number, ::group-off} min} other {il y a {minutes, number, ::group-off} min}}",
35392
+ "ui.settings.integrations.integration_model.hours_h_ago": "{hours, plural, one {il y a {hours, number, ::group-off} h} many {il y a {hours, number, ::group-off} h} other {il y a {hours, number, ::group-off} h}}",
35393
+ "ui.settings.integrations.integration_model.imported_from_origin": "Importé depuis {origin}",
35394
+ "ui.settings.integrations.integration_model.remove_in_origin": "Supprimer dans {origin}",
35395
+ "ui.settings.integrations.integration_model.defined_in_origin_s_config_remove_it_there": "Défini dans la configuration de {origin}. Supprimez-le dans ce fichier.",
35396
+ "ui.settings.integrations.integration_model.an_integration_named_trimmed_already_exists": "Une intégration nommée {trimmed} existe déjà.",
35397
+ "ui.settings.integrations.integration_model.available": "Disponible",
35398
+ "ui.settings.integrations.integration_model.ready": "Prêt",
35399
+ "ui.settings.integrations.integration_model.replace_keys": "{count, plural, one {Remplacer la clé enregistrée} many {Remplacer les clés enregistrées} other {Remplacer les clés enregistrées}}",
35400
+ "ui.settings.integrations.integration_row.keep": "Conserver",
35401
+ "ui.settings.integrations.integration_row.the_saved_sign_in_is_removed_too": "Les identifiants de connexion enregistrés seront aussi supprimés.",
35402
+ "ui.settings.integrations.integration_row.its_saved_credential_is_removed_too": "Son identifiant enregistré sera aussi supprimé.",
35403
+ "ui.settings.integrations.integration_row.remove": "Supprimer",
35404
+ "ui.settings.integrations.integration_row.sign_out": "Se déconnecter",
35405
+ "ui.settings.integrations.integration_row.more_actions_for_name": "Autres actions pour {name}",
35406
+ "ui.settings.integrations.integration_row.remove_name": "Supprimer {name} ?",
35407
+ "ui.settings.integrations.integration_row.sign_out_of_name": "Se déconnecter de {name} ?",
35408
+ "ui.settings.integrations.integration_row.agents_in_every_chat_lose_access_to_name": "Les agents de toutes les conversations perdront l’accès à {name}.",
35409
+ "ui.settings.integrations.integration_sign_in_dialog.cancel_sign_in": "Annuler la connexion",
35410
+ "ui.settings.integrations.integration_sign_in_dialog.continue_in_browser": "Continuer dans le navigateur",
35411
+ "ui.settings.integrations.integration_sign_in_dialog.try_again": "Réessayer",
35412
+ "ui.settings.integrations.integration_sign_in_dialog.starting_sign_in": "Démarrage de la connexion…",
35413
+ "ui.settings.integrations.integration_sign_in_dialog.copy_the_sign_in_link": "Copier le lien de connexion",
35414
+ "ui.settings.integrations.integration_sign_in_dialog.open_the_sign_in_page": "Ouvrir la page de connexion",
35415
+ "ui.settings.integrations.integration_sign_in_dialog.your_browser_didn_t_open_open_this_link_to_approve_access": "Votre navigateur ne s’est pas ouvert. Ouvrez ce lien pour autoriser l’accès :",
35416
+ "ui.settings.integrations.integration_sign_in_dialog.your_browser_didn_t_open_and_no_link_was_provided_cancel_and_try_": "Votre navigateur ne s’est pas ouvert et aucun lien n’a été fourni. Annulez et réessayez.",
35417
+ "ui.settings.integrations.integration_sign_in_dialog.sign_in_cancelled": "Connexion annulée.",
35418
+ "ui.settings.integrations.integration_sign_in_dialog.press_try_again_when_you_are_ready": "Appuyez sur Réessayer lorsque vous êtes prêt.",
35419
+ "ui.settings.integrations.integration_sign_in_dialog.sign_in_didn_t_finish": "La connexion n’a pas abouti.",
35420
+ "ui.settings.integrations.integration_sign_in_dialog.the_server_didn_t_say_why": "Le serveur n’a pas précisé la raison.",
35421
+ "ui.settings.integrations.integration_sign_in_dialog.this_server_may_not_accept_sign_ins_from_local_operator_check_the": "Ce serveur n’accepte peut-être pas les connexions depuis Local Operator. Vérifiez ses paramètres ou ajoutez une clé à la place.",
35422
+ "ui.settings.integrations.integration_sign_in_dialog.this_server_may_not_accept_sign_ins_from_local_operator_check_the_2": "Ce serveur n’accepte peut-être pas les connexions depuis Local Operator. Vérifiez ses paramètres, puis réessayez.",
35423
+ "ui.settings.integrations.integration_sign_in_dialog.this_server_doesn_t_publish_a_browser_sign_in_add_its_key_instead": "Ce serveur ne propose pas de connexion par navigateur. Ajoutez sa clé à la place.",
35424
+ "ui.settings.integrations.integration_sign_in_dialog.this_server_doesn_t_publish_a_browser_sign_in_check_the_server_s_": "Ce serveur ne propose pas de connexion par navigateur. Vérifiez ses paramètres, puis réessayez.",
35425
+ "ui.settings.integrations.integration_sign_in_dialog.check_the_server_s_url_and_your_network_then_try_again": "Vérifiez l’URL du serveur et votre connexion réseau, puis réessayez.",
35426
+ "ui.settings.integrations.integration_sign_in_dialog.check_the_server_s_settings_then_try_again": "Vérifiez les paramètres du serveur, puis réessayez.",
35427
+ "ui.settings.integrations.integration_sign_in_dialog.close": "Fermer",
35428
+ "ui.settings.integrations.integration_sign_in_dialog.sign_in_link_copied": "Lien de connexion copié.",
35429
+ "ui.settings.integrations.integration_sign_in_dialog.your_browser_opened_approve_access_to_name_there_then_come_back_h": "Votre navigateur s’est ouvert. Autorisez-y l’accès à {name}, puis revenez ici.",
35430
+ "ui.settings.integrations.integration_sign_in_dialog.waiting_for_you_to_approve_access_to_name": "En attente de votre autorisation d’accès à {name}…",
35431
+ "ui.settings.integrations.integration_sign_in_dialog.signed_in_to_name_agents_can_use_it_now": "Connecté à {name}. Les agents peuvent maintenant l’utiliser.",
35432
+ "ui.settings.integrations.integration_sign_in_dialog.sign_in_to_name": "Se connecter à {name}",
35433
+ "ui.settings.integrations.mcp_management_section.add_integration": "Ajouter une intégration",
35434
+ "ui.settings.integrations.mcp_management_section.integrations_need_a_newer_local_operator_backend_update_it_and_re": "Les intégrations nécessitent un serveur Local Operator plus récent. Mettez-le à jour et redémarrez l’application pour les gérer ici.",
35435
+ "ui.settings.integrations.mcp_management_section.integrations_can_be_managed_here_once_a_chat_has_started": "Vous pourrez gérer les intégrations ici une fois une conversation démarrée.",
35436
+ "ui.settings.integrations.mcp_management_section.start_a_chat": "Démarrer une conversation",
35437
+ "ui.settings.integrations.mcp_management_section.updating_local_operator_removes_this_step": "Mettre Local Operator à jour supprime cette étape.",
35438
+ "ui.settings.integrations.mcp_management_section.loading_integrations": "Chargement des intégrations",
35439
+ "ui.settings.integrations.mcp_management_section.this_chat_s_folder_no_longer_exists_so_only_global_integrations_a": "Le dossier de cette conversation n’existe plus. Seules les intégrations globales sont affichées.",
35440
+ "ui.settings.integrations.mcp_management_section.integrations_couldn_t_be_loaded": "Les intégrations n’ont pas pu être chargées.",
35441
+ "ui.settings.integrations.mcp_management_section.retry": "Réessayer",
35442
+ "ui.settings.integrations.mcp_management_section.dismiss": "Masquer",
35443
+ "ui.settings.integrations.mcp_management_section.search_integrations": "Rechercher des intégrations",
35444
+ "ui.settings.integrations.mcp_management_section.no_integrations_yet": "Aucune intégration pour le moment",
35445
+ "ui.settings.integrations.mcp_management_section.integrations_let_agents_read_and_act_in_your_other_tools_like_not": "Les intégrations permettent aux agents de consulter vos autres outils, comme Notion ou Linear, et d’y agir. Ajoutez-en une avec une commande exécutée sur cet ordinateur ou l’URL d’un serveur.",
35446
+ "ui.settings.integrations.mcp_management_section.no_integrations_match_this_search": "Aucune intégration ne correspond à cette recherche.",
35447
+ "ui.settings.integrations.mcp_management_section.clear_search": "Effacer la recherche",
35448
+ "ui.settings.integrations.mcp_management_section.setup_steps_copied_paste_them_into_a_chat": "Instructions de configuration copiées. Collez-les dans une conversation.",
35449
+ "ui.settings.integrations.mcp_management_section.removed_name": "{name} a été supprimé.",
35450
+ "ui.settings.integrations.use_integrations.that_header_can_t_carry_this_key_it_may_already_be_set_on_the_ser": "Cet en-tête ne peut pas contenir cette clé. Il est peut-être déjà défini sur le serveur ou réservé au transport. Essayez un autre nom d’en-tête. Rien n’a été enregistré.",
35451
+ "ui.settings.integrations.use_integrations.a_saved_value_already_exists_for_this_key_tick_label_to_overwrite": "Une valeur est déjà enregistrée pour cette clé. Cochez « {label} » pour la remplacer.",
35452
+ "ui.settings.integrations.mcp_management_section.copy_section_title": "Intégrations",
35453
+ "ui.settings.integrations.mcp_management_section.copy_section_description": "Permettez aux agents d’utiliser vos outils et comptes, comme Notion, Linear ou GitHub.",
35454
+ "ui.settings.integrations.integration_model.copy_ready_explanation": "Tout est normal. Cette intégration démarre lorsqu’une conversation l’utilise.",
35455
+ "ui.settings.integrations.integration_model.copy_not_connected_explanation": "Cette intégration n’est pas active dans cette conversation.",
35456
+ "ui.settings.integrations.integration_model.copy_catalog_refusal_fallback": "Le serveur a refusé la demande. Rien n’a été modifié. Réessayez.",
35457
+ "ui.settings.integrations.add_integration_form.copy_add_integration_pickup_note": "Les nouvelles conversations peuvent l’utiliser immédiatement. Dans les conversations ouvertes, démarrez une nouvelle conversation ou rechargez les intégrations pour qu’elle apparaisse.",
35458
+ "ui.settings.integrations.add_integration_form.copy_transport_hint": "La plupart des services fournissent une URL. Choisissez Commande locale si leurs instructions mentionnent npx ou uvx.",
35459
+ "ui.settings.integrations.integration_sign_in_dialog.done": "Terminé",
35460
+ "ui.settings.integrations.integration_model.fix": "Corriger",
35461
+ "ui.settings.integrations.integration_model.connect": "Connecter",
35462
+ "ui.settings.integrations.integration_model.test": "Tester",
35463
+ "ui.settings.integrations.integration_model.reload": "Recharger",
35464
+ "ui.settings.integrations.integration_model.disconnect": "Déconnecter",
35465
+ "ui.settings.integrations.integration_model.global": "Global",
35466
+ "ui.settings.integrations.integration_key_dialog.add_keys_heading": "{count, plural, one {Ajouter la clé pour {name}} many {Ajouter les clés pour {name}} other {Ajouter les clés pour {name}}}",
35467
+ "ui.settings.integrations.integration_key_dialog.saving": "Enregistrement…",
35468
+ "ui.settings.integrations.mcp_management_section.borrowed_chat_notice": "Intégrations affichées pour {chat}, votre conversation la plus récente.",
35469
+ "ui.settings.integrations.integration_sign_in_dialog.browser_approval_notice": "Local Operator ouvre votre navigateur pour que vous autorisiez l’accès à {name}.{replaces, select, yes { Cette connexion remplace la connexion actuelle.} other {}}",
35470
+ "ui.settings.integrations.integration_model.days_ago": "{days, plural, one {il y a {days, number, ::group-off} j} many {il y a {days, number, ::group-off} j} other {il y a {days, number, ::group-off} j}}",
35471
+ "ui.settings.integrations.integration_model.connected_with_tools": "Connecté · {tools}",
35472
+ "ui.settings.integrations.integration_model.worked_when_with_tools": "A fonctionné {when} · {tools}",
35473
+ "ui.settings.integrations.integration_model.worked_earlier_with_tools": "A fonctionné auparavant · {tools}",
35474
+ "ui.settings.integrations.integration_model.tools_when_last_checked": "{tools} lors de la dernière vérification",
35475
+ "ui.settings.integrations.mcp_management_section.no_match_for_name": "Aucune intégration ne correspond à « {asked} ».",
35476
+ "ui.settings.integrations.mcp_management_section.showing_fallback_for_unknown": "« {shown} » est affiché — « {asked} » ne figure pas parmi vos intégrations.",
35477
+ "ui.settings.integrations.use_integrations.keys_not_saved": "Non enregistré : {keys}. Le stockage chiffré est peut-être verrouillé.",
35478
+ "ui.settings.integrations.mcp_management_section.search_integrations_placeholder": "Rechercher parmi {integrations}"
35479
+ };
34523
35480
  const frUiSettings = {
34524
35481
  "ui.settings.language.dialog.description": "S’applique à l’application et au terminal — le même réglage que dans les paramètres.",
34525
35482
  "ui.settings.language.dialog.loading": "Chargement du réglage actuel…",
@@ -34561,6 +35518,276 @@ const frUiSettings = {
34561
35518
  "ui.settings.profile.retry": "Réessayer",
34562
35519
  "ui.settings.profile.retrying": "Nouvel essai"
34563
35520
  };
35521
+ const frUiSettingsModel = {
35522
+ "ui.settings.model.backend_setting_combos.search_providers": "Rechercher des fournisseurs",
35523
+ "ui.settings.model.backend_setting_combos.search_models": "Rechercher des modèles",
35524
+ "ui.settings.model.model_setting_options.signed_in": "Connecté",
35525
+ "ui.settings.model.model_setting_options.needs_sign_in": "Connexion requise",
35526
+ "ui.settings.model.model_setting_options.custom_model": "Modèle personnalisé",
35527
+ "ui.settings.model.model_setting_options.custom_value": "Valeur personnalisée",
35528
+ "ui.settings.model.model_setting_options.models_for_name": "Modèles de {name}",
35529
+ "ui.settings.model.model_setting_options.no_models_listed_for_name_showing_all_models": "Aucun modèle répertorié pour {name}. Tous les modèles sont affichés.",
35530
+ "ui.settings.model.model_setting_options.provider_group_0": "Prêts à l’emploi",
35531
+ "ui.settings.model.model_setting_options.provider_group_1": "Serveur en cours d’exécution requis",
35532
+ "ui.settings.model.model_setting_options.provider_group_2": "Connexion requise",
35533
+ "ui.settings.model.settings_page.model_settings": "Paramètres des modèles",
35534
+ "ui.settings.model.settings_page.configure_the_default_ai_model_and_hosting_providers_used_for_gen": "Définissez le modèle d’IA et les fournisseurs d’hébergement par défaut utilisés pour générer les réponses. Ils s’appliquent à tous les agents sans modèle ou fournisseur spécifique. Vous pouvez les remplacer dans les paramètres de chaque agent.",
35535
+ "ui.settings.model.settings_page.you_need_a_radient_account_or_your_own_api_keys_to_reach_cloud_pr": "Un compte Radient ou vos propres clés API sont nécessaires pour accéder aux fournisseurs cloud. Pour afficher davantage de fournisseurs d’hébergement et de modèles ici, connectez-vous à Radient ou ajoutez une clé API ci-dessous, dans Fournisseurs de modèles.",
35536
+ "ui.settings.model.settings_page.model_providers": "Fournisseurs de modèles",
35537
+ "ui.settings.model.settings_page.no_hosting_options": "Aucun fournisseur d’hébergement disponible. Connectez-vous à un fournisseur ou ajoutez une clé API ci-dessous, dans Fournisseurs de modèles.",
35538
+ "ui.settings.model.system_prompt.instructions": "Instructions",
35539
+ "ui.settings.model.system_prompt.enter_instructions_for_how_all_agents_should_behave_and_respond_t": "Décrivez comment tous les agents doivent se comporter et répondre à vos demandes…",
35540
+ "ui.settings.model.system_prompt.cancel": "Annuler",
35541
+ "ui.settings.model.system_prompt.last_modified": "Dernière modification :",
35542
+ "ui.settings.model.system_prompt.system_prompt": "Prompt système",
35543
+ "ui.settings.model.system_prompt.every_local_operator_agent_receives_this_prompt_in_addition_to_it": "Chaque agent Local Operator reçoit ce prompt en plus de ses propres instructions. Indiquez-y vos attentes générales et les informations que tous les agents doivent connaître sur vous, comme votre nom, l’endroit où vous vous trouvez ou vos préférences. Il est transmis au fournisseur d’hébergement sélectionné.",
35544
+ "ui.settings.model.system_prompt.loading_system_prompt": "Chargement du prompt système",
35545
+ "ui.settings.model.system_prompt.save_changes": "Enregistrer les modifications",
35546
+ "ui.settings.model.system_prompt.unknown_error": "Erreur inconnue",
35547
+ "ui.settings.model.model_setting_options.copy_sign_in_unknown_group": "État de connexion inconnu",
35548
+ "ui.settings.model.model_setting_options.copy_current_value_group": "Valeur actuelle",
35549
+ "ui.settings.model.model_setting_options.copy_signed_in_group": "Connecté",
35550
+ "ui.settings.model.model_setting_options.copy_needs_sign_in_group": "Connexion requise",
35551
+ "ui.settings.model.system_prompt.saving": "Enregistrement…",
35552
+ "ui.settings.model.model_setting_options.provider_detail": "{provider}{aggregated, select, yes {, via un agrégateur} other {}}{credential, select, signed_in {, connecté} missing {, aucun identifiant} other {}}",
35553
+ "ui.settings.model.system_prompt.load_failed": "Impossible de charger le prompt système : {reason}"
35554
+ };
35555
+ const frUiSettingsNavigation = {
35556
+ "ui.settings.navigation.settings_page.the_local_operator_server_is_taking_longer_than_usual_to_answer_i": "Le serveur Local Operator met plus de temps que d’habitude à répondre. S’il ne répond pas, vous pourrez réessayer ici.",
35557
+ "ui.settings.navigation.settings_page.your_settings_could_not_be_loaded": "Vos paramètres n’ont pas pu être chargés.",
35558
+ "ui.settings.navigation.settings_page.sign_in_to_the_services_your_agents_think_with_new_chats_use_your": "Connectez-vous aux services d’IA utilisés par vos agents. Les nouvelles conversations utilisent votre modèle par défaut.",
35559
+ "ui.settings.navigation.settings_page.backend_settings": "Paramètres du serveur",
35560
+ "ui.settings.navigation.settings_page.every_setting_the_backend_registry_owns_searchable_with_typed_edi": "Tous les paramètres gérés par le serveur, avec recherche, champs adaptés à chaque type de valeur et indication de leur prise d’effet.",
35561
+ "ui.settings.navigation.settings_page.retry": "Réessayer",
35562
+ "ui.settings.navigation.settings_page.loading_settings": "Chargement des paramètres",
35563
+ "ui.settings.navigation.settings_sidebar.settings_sections": "Sections des paramètres",
35564
+ "ui.settings.navigation.settings_sidebar.general": "Général",
35565
+ "ui.settings.navigation.settings_sidebar.backend": "Serveur",
35566
+ "ui.settings.navigation.settings_sidebar.system": "Système",
35567
+ "ui.settings.navigation.settings_sidebar.general_settings": "Paramètres généraux",
35568
+ "ui.settings.navigation.settings_sidebar.radient_account": "Compte Radient",
35569
+ "ui.settings.navigation.settings_sidebar.integrations": "Intégrations",
35570
+ "ui.settings.navigation.settings_sidebar.appearance": "Apparence",
35571
+ "ui.settings.navigation.settings_sidebar.speech_voicing": "Voix de l’assistant",
35572
+ "ui.settings.navigation.settings_sidebar.keyboard_shortcuts": "Raccourcis clavier",
35573
+ "ui.settings.navigation.settings_sidebar.model_providers": "Fournisseurs de modèles",
35574
+ "ui.settings.navigation.settings_sidebar.backend_settings": "Paramètres du serveur",
35575
+ "ui.settings.navigation.settings_sidebar.application_updates": "Mises à jour de l’application",
35576
+ "ui.settings.navigation.settings_sidebar.account": "Compte",
35577
+ "ui.settings.navigation.settings_page.retrying": "Nouvel essai"
35578
+ };
35579
+ const frUiSettingsShortcuts = {
35580
+ "ui.settings.shortcuts.keyboard_shortcuts_section.clear": "Effacer",
35581
+ "ui.settings.shortcuts.keyboard_shortcuts_section.reset": "Réinitialiser",
35582
+ "ui.settings.shortcuts.keyboard_shortcuts_section.press_the_keys_you_want_esc_cancels": "Appuyez sur les touches souhaitées ; Esc annule.",
35583
+ "ui.settings.shortcuts.keyboard_shortcuts_section.keyboard_shortcuts": "Raccourcis clavier",
35584
+ "ui.settings.shortcuts.keyboard_shortcuts_section.shortcuts_for_the_panel_rail_focus_a_field_and_press_the_keys_you": "Raccourcis de la barre des panneaux. Activez un champ, puis appuyez sur les touches souhaitées. Esc annule, Réinitialiser rétablit le raccourci par défaut et Effacer supprime le raccourci.",
35585
+ "ui.settings.shortcuts.keyboard_shortcuts_section.no_shortcut": "Aucun raccourci",
35586
+ "ui.settings.shortcuts.keyboard_shortcuts_section.label_press_the_keys_you_want": "{label} : appuyez sur les touches souhaitées",
35587
+ "ui.settings.shortcuts.keyboard_shortcuts_section.clear_label_s_shortcut": "Effacer le raccourci de {label}",
35588
+ "ui.settings.shortcuts.keyboard_shortcuts_section.reset_label_to_its_default": "Rétablir le raccourci par défaut de {label}"
35589
+ };
35590
+ const frUiSettingsSpeech = {
35591
+ "ui.settings.speech.speech_section.try_again": "Réessayer",
35592
+ "ui.settings.speech.speech_section.retry": "Réessayer",
35593
+ "ui.settings.speech.speech_section.speaks_through": "Service vocal",
35594
+ "ui.settings.speech.speech_section.availability": "Disponibilité",
35595
+ "ui.settings.speech.speech_section.the_setting_could_not_be_saved": "Le paramètre n’a pas pu être enregistré.",
35596
+ "ui.settings.speech.speech_section.the_setting_could_not_be_reset": "Le paramètre n’a pas pu être réinitialisé.",
35597
+ "ui.settings.speech.speech_section.speech_voicing": "Voix de l’assistant",
35598
+ "ui.settings.speech.speech_section.how_the_assistant_sounds_when_it_speaks_aloud": "La voix de l’assistant lorsqu’il parle à haute voix.",
35599
+ "ui.settings.speech.speech_section.speech_settings_could_not_be_loaded": "Les paramètres vocaux n’ont pas pu être chargés.",
35600
+ "ui.settings.speech.speech_section.nothing_yet": "Aucun pour le moment",
35601
+ "ui.settings.speech.speech_section.no_provider": "Aucun fournisseur",
35602
+ "ui.settings.speech.speech_section.available": "(disponible)",
35603
+ "ui.settings.speech.speech_section.not_available": "(indisponible)",
35604
+ "ui.settings.speech.speech_settings_model.radient_pass": "Radient Pass",
35605
+ "ui.settings.speech.speech_settings_model.no_provider": "Aucun fournisseur",
35606
+ "ui.settings.speech.speech_section.copy_backend_older_sentence": "Ce serveur ne propose pas les paramètres vocaux. Mettez-le à jour pour régler la voix de l’assistant.",
35607
+ "ui.settings.speech.speech_section.copy_unavailable_sentence": "La disponibilité de la voix n’a pas pu être vérifiée.",
35608
+ "ui.settings.speech.speech_section.ready": "Prêt",
35609
+ "ui.settings.speech.speech_section.missing_voice_rows": "{count, plural, one {Ce serveur ne reconnaît pas encore {rows}. Ce paramètre n’est donc pas affiché.} many {Ce serveur ne reconnaît pas encore {rows}. Ces paramètres ne sont donc pas affichés.} other {Ce serveur ne reconnaît pas encore {rows}. Ces paramètres ne sont donc pas affichés.}}"
35610
+ };
35611
+ const frUiSettingsUpdates = {
35612
+ "ui.settings.updates.app_updates_section.application_updates_and_info": "Mises à jour et informations",
35613
+ "ui.settings.updates.app_updates_section.check_for_updates_and_view_information_about_your_local_operator_": "Vérifiez les mises à jour et consultez les informations sur votre installation de Local Operator.",
35614
+ "ui.settings.updates.app_updates_section.application_version": "Version de l’application",
35615
+ "ui.settings.updates.app_updates_section.the_version_of_the_local_operator_user_interface_application": "La version de l’application de bureau Local Operator, qui fournit l’interface utilisateur.",
35616
+ "ui.settings.updates.app_updates_section.server_version": "Version du serveur",
35617
+ "ui.settings.updates.app_updates_section.the_version_of_the_local_operator_api_server_backend_and_the_addr": "La version du serveur API de Local Operator et l’adresse du service auprès duquel elle a été lue.",
35618
+ "ui.settings.updates.app_updates_section.not_answering": "Ne répond pas",
35619
+ "ui.settings.updates.app_updates_section.platform": "Plateforme",
35620
+ "ui.settings.updates.app_updates_section.the_operating_system_and_architecture_your_application_is_running": "Le système d’exploitation et l’architecture utilisés par l’application.",
35621
+ "ui.settings.updates.app_updates_section.node_js_version": "Version de Node.js",
35622
+ "ui.settings.updates.app_updates_section.the_javascript_runtime_environment_version": "La version du runtime JavaScript.",
35623
+ "ui.settings.updates.app_updates_section.electron_version": "Version d’Electron",
35624
+ "ui.settings.updates.app_updates_section.the_framework_version_enabling_this_desktop_application": "La version du framework qui permet à cette application de fonctionner sur votre ordinateur.",
35625
+ "ui.settings.updates.app_updates_section.state_loading": "Chargement…",
35626
+ "ui.settings.updates.app_updates_section.state_not_connected": "Non connecté",
35627
+ "ui.settings.updates.app_updates_section.state_not_attached": "Non rattaché",
35628
+ "ui.settings.updates.app_updates_section.state_version_unknown": "Version inconnue",
35629
+ "ui.settings.updates.app_updates_section.state_unavailable": "Indisponible",
35630
+ "ui.settings.updates.update_following.update_notifications": "Notifications de mise à jour",
35631
+ "ui.settings.updates.update_following.how_much_of_a_version_change_shows_the_update_notice_at_the_botto": "Choisissez les changements de version qui déclenchent l’avis en bas de la fenêtre. Une vérification lancée manuellement affiche toujours son résultat.",
35632
+ "ui.settings.updates.update_following.application_updates": "Mises à jour de l’application",
35633
+ "ui.settings.updates.update_following.server_updates": "Mises à jour du serveur",
35634
+ "ui.settings.updates.update_following.patch_label": "Toutes les versions",
35635
+ "ui.settings.updates.update_following.patch_help": "Versions correctives, mineures et majeures.",
35636
+ "ui.settings.updates.update_following.minor_label": "Mineures et majeures uniquement",
35637
+ "ui.settings.updates.update_following.minor_help": "Ignore les versions correctives.",
35638
+ "ui.settings.updates.update_following.major_label": "Changements incompatibles uniquement",
35639
+ "ui.settings.updates.update_following.major_help": "Ignore les versions correctives et mineures. Avant la version 1.0, une nouvelle version mineure constitue un changement incompatible.",
35640
+ "ui.settings.updates.update_following.surface_choice": "{surface} : {choice}"
35641
+ };
35642
+ const hiUiConsole = {
35643
+ "ui.console.capacity.summary": "ऐप में {live, number, ::group-off} चालू, सीमा {limit, number, ::group-off}",
35644
+ "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} रखे गए}}",
35645
+ "ui.console.capacity.summary_compact_bare": "{live, number, ::group-off}/{limit, number, ::group-off}",
35646
+ "ui.console.capacity.archived": " · {archived, plural, one {{archived, number, ::group-off} रखा गया} other {{archived, number, ::group-off} रखे गए}}",
35647
+ "ui.console.capacity.full": " · सीमा पूरी",
35648
+ "ui.console.capacity.help": "ये गिनतियाँ पूरे ऐप की सभी बातचीतों के लिए हैं। रखे गए इतिहास के लिए प्रोसेस स्लॉट नहीं लगता।",
35649
+ "ui.console.capacity.resources": "प्रबंधित स्टोरेज का अनुमान: {memory, number, ::group-off} MiB। लॉग: {logs, number, ::group-off} MiB। लंबित आउटपुट: {pending, number, ::group-off} MiB। टर्मिनल सेल: {cells, number, ::group-off}। सुरक्षित रखे गए टर्मिनल: {protected, number, ::group-off}। इसमें चाइल्ड प्रोसेस की मेमोरी शामिल नहीं है।",
35650
+ "ui.console.cleanup.label": "एजेंट के समाप्त टर्मिनल हटाएँ",
35651
+ "ui.console.cleanup.help": "इस बातचीत में एजेंट के समाप्त टर्मिनल हटाता है। जिन समाप्त टर्मिनलों को रखने के लिए एजेंट ने कहा था, वे डिस्क पर बने रहते हैं; बाकी बंद कर दिए जाते हैं और उनका आउटपुट नहीं रखा जाता। आपके खोले हुए और इस्तेमाल में मौजूद टर्मिनल नहीं बदले जाते।",
35652
+ "ui.console.cleanup.result": "{released, plural, one {एजेंट का {released, number, ::group-off} समाप्त टर्मिनल हटाया गया।} other {एजेंट के {released, number, ::group-off} समाप्त टर्मिनल हटाए गए।}} {protected, plural, =0 {} one {{protected, number, ::group-off} अभी इस्तेमाल में है और खुला छोड़ा गया।} other {{protected, number, ::group-off} अभी इस्तेमाल में हैं और खुले छोड़े गए।}}",
35653
+ "ui.console.cleanup.result_none": "हटाने के लिए कुछ नहीं — इस बातचीत में एजेंट का कोई समाप्त टर्मिनल नहीं है।",
35654
+ "ui.console.dismiss_history": "टर्मिनल हटाएँ और रखा गया आउटपुट मिटाएँ",
35655
+ "ui.console.dismiss.body": "इस टर्मिनल को हटाने से उसका रखा गया आउटपुट डिस्क से मिट जाता है, इसलिए ऐप दोबारा शुरू करने पर वह बहाल नहीं हो सकेगा।",
35656
+ "ui.console.dismiss.title": "यह टर्मिनल हटाएँ?",
35657
+ "ui.console.dismiss.confirm": "टर्मिनल हटाएँ",
35658
+ "ui.console.close.body": "यह यहाँ चल रहे प्रोग्राम को बंद कर देता है और उसका टैब हटा देता है।",
35659
+ "ui.console.close.busy": "बंद हो रहा है…",
35660
+ "ui.console.close.confirm": "टर्मिनल बंद करें",
35661
+ "ui.console.close.kept": "उसका आउटपुट रखा जाता है।",
35662
+ "ui.console.close.title": "यह टर्मिनल बंद करें?",
35663
+ "ui.console.create_failed.detail": "कंसोल होस्ट चल रहा है, लेकिन उसने इस बातचीत के लिए प्रोग्राम शुरू करने से इनकार किया — इसलिए सिर्फ़ यह कोशिश विफल हुई है, कंसोल बंद नहीं किया गया है। पहले फिर कोशिश करें; अगर बार-बार विफल हो, तो नीचे होस्ट का बताया कारण देखें।",
35664
+ "ui.console.create_failed.retry": "फिर कोशिश करें",
35665
+ "ui.console.create_failed.title": "इस सत्र में कंसोल शुरू नहीं हो सका",
35666
+ "ui.console.empty.detail": "कंसोल इस बातचीत के फ़ोल्डर में प्रोग्राम चलाता है और उसका आउटपुट रखता है, चाहे यह पैनल खुला हो या नहीं।",
35667
+ "ui.console.empty.title": "इस सत्र में कोई कंसोल नहीं है",
35668
+ "ui.console.ended.exit_code": "एग्ज़िट कोड {code}",
35669
+ "ui.console.ended.exit_unknown": "एग्ज़िट कोड उपलब्ध नहीं है",
35670
+ "ui.console.ended.live": "यह टर्मिनल समाप्त हो चुका है",
35671
+ "ui.console.ended.restored": "यह टर्मिनल समाप्त हो चुका है और उसका इतिहास बहाल किया गया है",
35672
+ "ui.console.loading.create": "कंसोल शुरू हो रहा है",
35673
+ "ui.console.loading.read": "इस सत्र का कंसोल पढ़ा जा रहा है",
35674
+ "ui.console.new": "नया कंसोल",
35675
+ "ui.console.pane.blip": "आपके पिछली बार देखने के बाद समाप्त हुआ",
35676
+ "ui.console.pane.close": "कंसोल बंद करें",
35677
+ "ui.console.pane.close_refusal": "टर्मिनल बंद नहीं किया जा सका।",
35678
+ "ui.console.pane.label": "कंसोल",
35679
+ "ui.console.pane.needs_conversation.detail": "कंसोल बातचीत के कार्य फ़ोल्डर में चलता है, इसलिए अभी उसके लिए कोई जगह नहीं है।",
35680
+ "ui.console.pane.needs_conversation.title": "कंसोल के लिए बातचीत ज़रूरी है",
35681
+ "ui.console.pane.surfaces": "कंसोल सरफ़ेस",
35682
+ "ui.console.secure": "सुरक्षित इनपुट चालू है: आप यहाँ जो टाइप करते हैं, वह दर्ज नहीं होता।",
35683
+ "ui.console.unavailable.disabled.detail": "इस ऐप के एनवायरनमेंट में LOCAL_OPERATOR_UI_CONSOLE_HOST का मान 0 है, इसलिए कोई टर्मिनल शुरू नहीं होता और कोई सरफ़ेस नहीं बनाया जा सकता। इस सेटिंग को हटाने से कंसोल फिर चालू हो जाता है।",
35684
+ "ui.console.unavailable.disabled.title": "इस बार कंसोल बंद रखा गया है",
35685
+ "ui.console.unavailable.pty.detail": "इस बार टर्मिनल सपोर्ट लोड नहीं हुआ। Local Operator अपडेट करने से यह बहाल हो जाता है; वजह ऐप के लॉग में दी गई है।",
35686
+ "ui.console.unavailable.title": "इस ऐप में कंसोल उपलब्ध नहीं है",
35687
+ "ui.console.unavailable.unknown.detail": "यह विंडो कंसोल से संपर्क नहीं कर सकी और इसकी वजह नहीं बताई। वजह ऐप के लॉग में दी गई है।",
35688
+ "ui.console.tab.ended": "समाप्त",
35689
+ "ui.console.tab.agent_opened": "यह कंसोल किसी एजेंट ने खोला था",
35690
+ "ui.console.tab.agent_typed": "इस कंसोल में किसी एजेंट ने टाइप किया है",
35691
+ "ui.console.tab.close_label": "{title} बंद करें, टैब {index, number, ::group-off}, कुल {total, number, ::group-off}",
35692
+ "ui.console.tab.clear_label": "{title} हटाएँ, टैब {index, number, ::group-off}, कुल {total, number, ::group-off}",
35693
+ "ui.console.tab.clear_label_retained": "{title} हटाएँ, टैब {index, number, ::group-off}, कुल {total, number, ::group-off} — रखा गया आउटपुट मिट जाएगा",
35694
+ "ui.console.secure_toggle.stop": "सुरक्षित इनपुट बंद करें",
35695
+ "ui.console.secure_toggle.start": "सुरक्षित इनपुट",
35696
+ "ui.console.secure_toggle.start_tooltip": "सुरक्षित इनपुट: इस टर्मिनल की रिकॉर्डिंग बंद करें",
35697
+ "ui.console.close.cancel": "रद्द करें",
35698
+ "ui.console.terminal.prompt_label": "टर्मिनल इनपुट",
35699
+ "ui.console.terminal.too_much_output": "बोलकर सुनाने के लिए आउटपुट बहुत ज़्यादा है। पढ़ने के लिए पंक्तियों पर खुद जाएँ।"
35700
+ };
35701
+ const hiUiOnboarding = {
35702
+ "ui.onboarding.connect.intro": "Local Operator को काम करने के लिए AI खाते की ज़रूरत है। Radient सबसे आसान है: ब्राउज़र में एक बार साइन इन करें, कुछ पेस्ट नहीं करना पड़ता। पहले से ChatGPT या Claude के लिए भुगतान करते हैं? उसी खाते से साइन इन करें। दूसरे विकल्प देखने के लिए नीचे प्रोवाइडरों की सूची खोलें।",
35703
+ "ui.onboarding.default_model.block.loading_models": "मॉडल की सूची लोड हो रही है…",
35704
+ "ui.onboarding.default_model.block.pick_a_model": "आगे बढ़ने के लिए मॉडल चुनें।",
35705
+ "ui.onboarding.default_model.change": "बदलें",
35706
+ "ui.onboarding.default_model.connected_pick": "{brand} कनेक्ट है। नई चैट के लिए मॉडल चुनें।",
35707
+ "ui.onboarding.default_model.empty_helper": "अभी कोई प्रोवाइडर कनेक्ट नहीं है। एक चरण पीछे जाकर कनेक्ट करें।",
35708
+ "ui.onboarding.default_model.fallback_name": "{brand} का डिफ़ॉल्ट मॉडल",
35709
+ "ui.onboarding.default_model.intro": "नई चैट में यही मॉडल इस्तेमाल होता है। हर एजेंट बाद में अलग मॉडल चुन सकता है।",
35710
+ "ui.onboarding.default_model.loading": "आपके मॉडल लोड हो रहे हैं",
35711
+ "ui.onboarding.default_model.none_connected": "अभी कोई प्रोवाइडर कनेक्ट नहीं है। पीछे जाकर कनेक्ट करें, या सेटअप छोड़कर बाद में चैट से कनेक्ट करें।",
35712
+ "ui.onboarding.default_model.nothing_saved": "कुछ भी नहीं सहेजा जाएगा: Local Operator अभी {brand} मॉडल की सूची नहीं दिखा सकता, इसलिए सेटअप बिना डिफ़ॉल्ट मॉडल के पूरा होगा। पहला संदेश भेजने से पहले सेटिंग्स में मॉडल चुनें।",
35713
+ "ui.onboarding.default_model.provider_fallback": "इस प्रोवाइडर के",
35714
+ "ui.onboarding.default_model.tag.applied": "आपका डिफ़ॉल्ट",
35715
+ "ui.onboarding.default_model.tag.suggested": "आपके खाते के लिए सुझाया गया",
35716
+ "ui.onboarding.dialog.setup": "सेटअप",
35717
+ "ui.onboarding.extras.greeting_done": "{name} आपकी चीफ़ ऑफ़ स्टाफ हैं। उनसे आगे की बातचीत उसी चैट में होगी; साइडबार से एक कुंजी दबाते ही उसे खोल सकते हैं। चाहें तो सीधे नई चैट पर भी जा सकते हैं।",
35718
+ "ui.onboarding.extras.greeting_owed": "{name} आपकी चीफ़ ऑफ़ स्टाफ हैं। वे पहले नमस्ते कहेंगी, पूछेंगी कि आपको किस नाम से बुलाएँ और किस काम में मदद चाहिए, फिर ऐप से परिचित कराएँगी। चाहें तो सीधे नई चैट पर भी जा सकते हैं।",
35719
+ "ui.onboarding.extras.next_meet": "अगला: {name} से मिलें",
35720
+ "ui.onboarding.modal.action.back": "पीछे",
35721
+ "ui.onboarding.modal.action.continue": "आगे बढ़ें",
35722
+ "ui.onboarding.modal.action.finish": "पूरा करें",
35723
+ "ui.onboarding.modal.action.meet": "{name} से मिलें",
35724
+ "ui.onboarding.modal.action.skip": "छोड़ें",
35725
+ "ui.onboarding.modal.action.skip_for_now": "अभी छोड़ें",
35726
+ "ui.onboarding.modal.action.skip_to_chat": "सीधे चैट पर जाएँ",
35727
+ "ui.onboarding.modal.error.aida_open_failed": "{name} की बातचीत खुल नहीं सकी, इसलिए आप अभी नई चैट में हैं।",
35728
+ "ui.onboarding.modal.title.connect_provider": "AI खाता कनेक्ट करें",
35729
+ "ui.onboarding.modal.title.default_model": "आपका डिफ़ॉल्ट मॉडल",
35730
+ "ui.onboarding.modal.title.extras": "वेब खोज (वैकल्पिक)",
35731
+ "ui.onboarding.modal.title.extras_with_name": "वेब खोज, फिर {name} से मिलें",
35732
+ "ui.onboarding.modal.title.fallback": "पहली बार का सेटअप",
35733
+ "ui.onboarding.search.each_key_saved": "किसी फ़ील्ड से बाहर निकलते ही उसकी कुंजी आपके डिवाइस पर सहेज दी जाती है।",
35734
+ "ui.onboarding.search.intro": "काम करते समय एजेंट जानकारी खोज सकते हैं — आज की कीमतें, इस हफ़्ते की ख़बरें — सिर्फ़ मॉडल की पहले से सीखी जानकारी पर निर्भर रहने के बजाय।",
35735
+ "ui.onboarding.search.mode.free": "मुफ़्त",
35736
+ "ui.onboarding.search.mode.free_detail": "मुफ़्त प्रोवाइडर बारी-बारी से इस्तेमाल होते हैं — DuckDuckGo, Tavily का मुफ़्त प्लान, Exa और Parallel। कुंजी की ज़रूरत नहीं; इन्हें सभी साझा करते हैं, इसलिए व्यस्त समय में खोज धीमी हो सकती है।",
35737
+ "ui.onboarding.search.mode.keys": "API कुंजियाँ जोड़ें",
35738
+ "ui.onboarding.search.mode.keys_detail": "जिन खोज प्रोवाइडरों का इस्तेमाल करते हैं, उनके लिए अपनी कुंजियाँ जोड़ें।",
35739
+ "ui.onboarding.search.mode.label": "खोज का सेटअप",
35740
+ "ui.onboarding.search.recommended": "सुझाया गया",
35741
+ "ui.onboarding.search.row.get_your": "अपनी {name} पाएँ",
35742
+ "ui.onboarding.search.row.not_saved": "सहेजी नहीं गई — {message}",
35743
+ "ui.onboarding.search.row.placeholder": "अपनी API कुंजी पेस्ट करें",
35744
+ "ui.onboarding.search.row.save_failed": "कुंजी सहेजी नहीं जा सकी।",
35745
+ "ui.onboarding.search.row.saved": "सहेजी गई",
35746
+ "ui.onboarding.search.row.saving": "{name} सहेजी जा रही है",
35747
+ "ui.onboarding.modal.step_of": "चरण {current, number, ::group-off}, कुल {total, number, ::group-off}",
35748
+ "ui.onboarding.modal.steps_total": "{total, plural, one {{total, number, ::group-off} चरण} other {{total, number, ::group-off} चरण}}"
35749
+ };
35750
+ const hiUiSettings = {
35751
+ "ui.settings.language.dialog.description": "ऐप और टर्मिनल, दोनों पर लागू होती है — सेटिंग्स पेज भी इसी सेटिंग को बदलता है।",
35752
+ "ui.settings.language.dialog.loading": "मौजूदा सेटिंग लोड हो रही है...",
35753
+ "ui.settings.language.dialog.retry": "फिर कोशिश करें",
35754
+ "ui.settings.language.dialog.retrying": "फिर कोशिश हो रही है",
35755
+ "ui.settings.language.dialog.save": "सहेजें",
35756
+ "ui.settings.language.dialog.saved": "सहेजा गया",
35757
+ "ui.settings.language.dialog.title": "इंटरफ़ेस की भाषा",
35758
+ "ui.settings.language.dialog.unavailable": "कनेक्ट हुई सेवा इस डायलॉग में बदली जाने वाली सेटिंग्स उपलब्ध नहीं कराती।",
35759
+ "ui.settings.language.effective": "लागू भाषा: {locale}",
35760
+ "ui.settings.language.external_notice": "इंटरफ़ेस की भाषा कहीं और बदली गई — अब {language} है।",
35761
+ "ui.settings.language.general.description": "ऐप और टर्मिनल के लिए एक ही भाषा चुनें। बदलाव तुरंत सहेजे जाते हैं; मौजूदा बातचीत दोबारा नहीं लिखी जाती।",
35762
+ "ui.settings.language.general.effective": "ऐप की लागू भाषा: {locale}",
35763
+ "ui.settings.language.general.last_known": "ऐप की पिछली सिंक हुई भाषा: {locale}",
35764
+ "ui.settings.language.general.no_resolution": "ऐप की भाषा अभी तय नहीं की गई है।",
35765
+ "ui.settings.language.general.pending": "भाषा सहेजी जा रही है…",
35766
+ "ui.settings.language.general.readback_error": "बदलाव सहेजे जाने की पुष्टि हुई, लेकिन मौजूदा सेटिंग जाँची नहीं जा सकी। दोबारा बदलने से पहले फिर कनेक्ट करें या फिर कोशिश करें।",
35767
+ "ui.settings.language.general.saved": "भाषा सहेजी गई।",
35768
+ "ui.settings.language.general.system": "सिस्टम की भाषा लें",
35769
+ "ui.settings.language.general.unavailable_choice": "उपलब्ध नहीं",
35770
+ "ui.settings.language.general.write_error": "भाषा सहेजी नहीं गई। आपकी पिछली सेटिंग नहीं बदली है। {message}",
35771
+ "ui.settings.language.palette_action": "इंटरफ़ेस की भाषा बदलें",
35772
+ "ui.settings.page.title": "सेटिंग्स",
35773
+ "ui.settings.profile.description_anonymous": "ऐप में दिखाई जाने वाली आपकी प्रोफ़ाइल की जानकारी। यह जानकारी एजेंटों को नहीं दी जाती।",
35774
+ "ui.settings.profile.description_authenticated": "ऐप में दिखाई जाने वाली आपकी प्रोफ़ाइल की जानकारी। यह जानकारी एजेंटों को नहीं दी जाती। ये विवरण आपके Radient खाते से मिलते हैं।",
35775
+ "ui.settings.profile.display_name.label": "दिखाया जाने वाला नाम",
35776
+ "ui.settings.profile.display_name.placeholder": "अपना नाम दर्ज करें...",
35777
+ "ui.settings.profile.email.label": "ईमेल पता",
35778
+ "ui.settings.profile.email.placeholder": "अपना ईमेल दर्ज करें...",
35779
+ "ui.settings.profile.title": "उपयोगकर्ता प्रोफ़ाइल",
35780
+ "ui.settings.section.interface_language.help": "इंटरफ़ेस की भाषा की यही सेटिंग टर्मिनल पर भी लागू होती है। auto आपके ऑपरेटिंग सिस्टम की भाषा लेता है; वह न मिलने पर अंग्रेज़ी।",
35781
+ "ui.settings.section.interface_language.label": "इंटरफ़ेस की भाषा",
35782
+ "ui.settings.tour.action": "ऐप का परिचय देखें",
35783
+ "ui.settings.tour.description": "ऐप का शुरुआती परिचय छूट गया था या फिर से देखना चाहते हैं? यहाँ से दोबारा शुरू करें।",
35784
+ "ui.settings.tour.title": "ऐप का परिचय",
35785
+ "ui.settings.profile.account_checking": "आपका Radient खाता जाँचा जा रहा है…",
35786
+ "ui.settings.profile.account_read_failed_retry": "आपके Radient खाते की जानकारी नहीं पढ़ी जा सकी, इसलिए नीचे दिए नाम और ईमेल केवल नमूने हैं, आपके खाते की जानकारी नहीं। फिर कोशिश करें।",
35787
+ "ui.settings.profile.account_read_failed_refused": "आपके Radient खाते की जानकारी नहीं पढ़ी जा सकी, इसलिए नीचे दिए नाम और ईमेल केवल नमूने हैं, आपके खाते की जानकारी नहीं। फिर कोशिश करें या Radient में दोबारा साइन इन करें।",
35788
+ "ui.settings.profile.retry": "फिर कोशिश करें",
35789
+ "ui.settings.profile.retrying": "फिर कोशिश हो रही है"
35790
+ };
34564
35791
  const ruUiConsole = {
34565
35792
  "ui.console.capacity.summary": "Активных терминалов в приложении: {live, number, ::group-off} из {limit, number, ::group-off}",
34566
35793
  "ui.console.capacity.summary_compact": "{live, number, ::group-off}/{limit, number, ::group-off} · сохранено: {archived, number, ::group-off}",
@@ -34859,6 +36086,155 @@ const viUiSettings = {
34859
36086
  "ui.settings.profile.retry": "Thử lại",
34860
36087
  "ui.settings.profile.retrying": "Đang thử lại"
34861
36088
  };
36089
+ const zhCNUiConsole = {
36090
+ "ui.console.capacity.summary": "应用中运行{live, number, ::group-off}个,上限{limit, number, ::group-off}个",
36091
+ "ui.console.capacity.summary_compact": "{live, number, ::group-off}/{limit, number, ::group-off} · 已保留{archived, number, ::group-off}个",
36092
+ "ui.console.capacity.summary_compact_bare": "{live, number, ::group-off}/{limit, number, ::group-off}",
36093
+ "ui.console.capacity.archived": " · 已保留{archived, number, ::group-off}个",
36094
+ "ui.console.capacity.full": " · 已满",
36095
+ "ui.console.capacity.help": "统计涵盖应用中的所有对话。保留的历史记录不占用进程名额。",
36096
+ "ui.console.capacity.resources": "估算的受管存储量:{memory, number, ::group-off} MiB。日志:{logs, number, ::group-off} MiB。待处理输出:{pending, number, ::group-off} MiB。终端单元格:{cells, number, ::group-off}。受保护终端:{protected, number, ::group-off}。不含子进程内存。",
36097
+ "ui.console.cleanup.label": "清理已结束的智能体终端",
36098
+ "ui.console.cleanup.help": "清理此对话中已结束的智能体终端。智能体要求保留的已结束终端仍存储在磁盘上;其余终端会关闭,输出不再保留。你打开的终端和仍在使用的终端不受影响。",
36099
+ "ui.console.cleanup.result": "已清理{released, plural, other {{released, number, ::group-off}个已结束的智能体终端}}。{protected, plural, =0 {} other {{protected, number, ::group-off}个终端仍在使用,未关闭。}}",
36100
+ "ui.console.cleanup.result_none": "无需清理:此对话中没有已结束的智能体终端。",
36101
+ "ui.console.dismiss_history": "清理终端并删除保留的输出",
36102
+ "ui.console.dismiss.body": "清理此终端会删除磁盘上保留的输出,重新启动后也无法恢复。",
36103
+ "ui.console.dismiss.title": "清理此终端?",
36104
+ "ui.console.dismiss.confirm": "清理终端",
36105
+ "ui.console.close.body": "这会结束此处运行的程序,并移除其标签页。",
36106
+ "ui.console.close.busy": "正在关闭……",
36107
+ "ui.console.close.confirm": "关闭终端",
36108
+ "ui.console.close.kept": "输出会保留。",
36109
+ "ui.console.close.title": "关闭此终端?",
36110
+ "ui.console.create_failed.detail": "控制台主机正在运行,但拒绝为此对话启动程序。这是本次启动失败,并非控制台已关闭。先重试;若仍失败,下方显示的是主机返回的原因。",
36111
+ "ui.console.create_failed.retry": "重试",
36112
+ "ui.console.create_failed.title": "无法在此会话中启动控制台",
36113
+ "ui.console.empty.detail": "控制台在此对话的目录中运行程序,无论此面板是否打开,都会保留输出。",
36114
+ "ui.console.empty.title": "此会话中没有控制台",
36115
+ "ui.console.ended.exit_code": "退出码{code}",
36116
+ "ui.console.ended.exit_unknown": "未获取退出码",
36117
+ "ui.console.ended.live": "此终端已结束",
36118
+ "ui.console.ended.restored": "此终端已结束,历史记录已恢复",
36119
+ "ui.console.loading.create": "正在启动控制台",
36120
+ "ui.console.loading.read": "正在读取此会话的控制台",
36121
+ "ui.console.new": "新建控制台",
36122
+ "ui.console.pane.blip": "上次查看后已结束",
36123
+ "ui.console.pane.close": "关闭控制台",
36124
+ "ui.console.pane.close_refusal": "无法关闭终端。",
36125
+ "ui.console.pane.label": "控制台",
36126
+ "ui.console.pane.needs_conversation.detail": "控制台需要在对话的工作目录中运行,目前还没有可用目录。",
36127
+ "ui.console.pane.needs_conversation.title": "控制台需要先有对话",
36128
+ "ui.console.pane.surfaces": "控制台标签页",
36129
+ "ui.console.secure": "安全输入已开启:此处输入的内容不会被记录。",
36130
+ "ui.console.unavailable.disabled.detail": "应用环境中的LOCAL_OPERATOR_UI_CONSOLE_HOST被设为0,因此不会启动终端,也无法创建控制台标签页。移除此设置即可重新启用控制台。",
36131
+ "ui.console.unavailable.disabled.title": "本次运行已禁用控制台",
36132
+ "ui.console.unavailable.pty.detail": "本次运行未能加载终端支持。更新Local Operator即可恢复,应用日志中记录了原因。",
36133
+ "ui.console.unavailable.title": "此应用中控制台不可用",
36134
+ "ui.console.unavailable.unknown.detail": "此窗口无法连接控制台,也未说明原因。原因记录在应用日志中。",
36135
+ "ui.console.tab.ended": "已结束",
36136
+ "ui.console.tab.agent_opened": "此控制台由智能体打开",
36137
+ "ui.console.tab.agent_typed": "智能体已在此控制台中输入过内容",
36138
+ "ui.console.tab.close_label": "关闭{title},第{index, number, ::group-off}个标签页,共{total, number, ::group-off}个",
36139
+ "ui.console.tab.clear_label": "清理{title},第{index, number, ::group-off}个标签页,共{total, number, ::group-off}个",
36140
+ "ui.console.tab.clear_label_retained": "清理{title},第{index, number, ::group-off}个标签页,共{total, number, ::group-off}个;删除保留的输出",
36141
+ "ui.console.secure_toggle.stop": "停止安全输入",
36142
+ "ui.console.secure_toggle.start": "安全输入",
36143
+ "ui.console.secure_toggle.start_tooltip": "安全输入:停止记录此终端",
36144
+ "ui.console.close.cancel": "取消",
36145
+ "ui.console.terminal.prompt_label": "终端输入",
36146
+ "ui.console.terminal.too_much_output": "输出过多,无法全部朗读;手动逐行浏览以阅读内容。"
36147
+ };
36148
+ const zhCNUiOnboarding = {
36149
+ "ui.onboarding.connect.intro": "Local Operator需要AI账户才能工作。Radient最方便:在浏览器中登录一次即可,无需粘贴任何内容。已订阅ChatGPT或Claude?也可以直接用该账户登录。要使用其他提供商,展开下方的提供商列表。",
36150
+ "ui.onboarding.default_model.block.loading_models": "正在加载模型列表……",
36151
+ "ui.onboarding.default_model.block.pick_a_model": "选择模型后继续。",
36152
+ "ui.onboarding.default_model.change": "更改",
36153
+ "ui.onboarding.default_model.connected_pick": "已连接{brand}。选择新对话使用的模型。",
36154
+ "ui.onboarding.default_model.empty_helper": "尚未连接任何提供商。返回上一步连接一个。",
36155
+ "ui.onboarding.default_model.fallback_name": "{brand}的默认模型",
36156
+ "ui.onboarding.default_model.intro": "新对话使用此模型。之后每个智能体都可以另选模型。",
36157
+ "ui.onboarding.default_model.loading": "正在加载你的模型",
36158
+ "ui.onboarding.default_model.none_connected": "尚未连接任何提供商。返回上一步连接,或跳过设置,稍后在对话中连接。",
36159
+ "ui.onboarding.default_model.nothing_saved": "不会保存任何设置:当前Local Operator还无法列出{brand}的模型,因此设置完成后仍无默认模型。发送第一条消息前,先在设置中选择模型。",
36160
+ "ui.onboarding.default_model.provider_fallback": "该提供商",
36161
+ "ui.onboarding.default_model.tag.applied": "你的默认模型",
36162
+ "ui.onboarding.default_model.tag.suggested": "为你的账户推荐",
36163
+ "ui.onboarding.dialog.setup": "设置",
36164
+ "ui.onboarding.extras.greeting_done": "{name}是你的首席助理。可以在她的对话中接着聊,按一下键即可从侧栏打开。也可以直接跳到新对话。",
36165
+ "ui.onboarding.extras.greeting_owed": "{name}是你的首席助理。她会先打招呼,问你怎么称呼、需要什么帮助,再带你熟悉应用。也可以直接跳到新对话。",
36166
+ "ui.onboarding.extras.next_meet": "下一步:认识{name}",
36167
+ "ui.onboarding.modal.action.back": "返回",
36168
+ "ui.onboarding.modal.action.continue": "继续",
36169
+ "ui.onboarding.modal.action.finish": "完成",
36170
+ "ui.onboarding.modal.action.meet": "认识{name}",
36171
+ "ui.onboarding.modal.action.skip": "跳过",
36172
+ "ui.onboarding.modal.action.skip_for_now": "暂时跳过",
36173
+ "ui.onboarding.modal.action.skip_to_chat": "跳到对话",
36174
+ "ui.onboarding.modal.error.aida_open_failed": "无法打开{name}的对话,已改为打开新对话。",
36175
+ "ui.onboarding.modal.title.connect_provider": "连接AI账户",
36176
+ "ui.onboarding.modal.title.default_model": "你的默认模型",
36177
+ "ui.onboarding.modal.title.extras": "网页搜索(可选)",
36178
+ "ui.onboarding.modal.title.extras_with_name": "设置网页搜索,再认识{name}",
36179
+ "ui.onboarding.modal.title.fallback": "首次设置",
36180
+ "ui.onboarding.search.each_key_saved": "离开某个输入框时,该密钥会立即保存到你的设备上。",
36181
+ "ui.onboarding.search.intro": "智能体可以边工作边查询今天的价格、本周的新闻等信息,而不必只依赖模型已有的知识。",
36182
+ "ui.onboarding.search.mode.free": "免费",
36183
+ "ui.onboarding.search.mode.free_detail": "轮流使用DuckDuckGo、Tavily的免费服务、Exa和Parallel等免费提供商。无需密钥;服务池由大家共用,繁忙时搜索可能较慢。",
36184
+ "ui.onboarding.search.mode.keys": "添加API密钥",
36185
+ "ui.onboarding.search.mode.keys_detail": "为你使用的搜索提供商添加自己的密钥。",
36186
+ "ui.onboarding.search.mode.label": "搜索设置",
36187
+ "ui.onboarding.search.recommended": "推荐",
36188
+ "ui.onboarding.search.row.get_your": "获取{name}",
36189
+ "ui.onboarding.search.row.not_saved": "未保存:{message}",
36190
+ "ui.onboarding.search.row.placeholder": "粘贴API密钥",
36191
+ "ui.onboarding.search.row.save_failed": "无法保存密钥。",
36192
+ "ui.onboarding.search.row.saved": "已保存",
36193
+ "ui.onboarding.search.row.saving": "正在保存{name}",
36194
+ "ui.onboarding.modal.step_of": "第{current, number, ::group-off}步,共{total, number, ::group-off}步",
36195
+ "ui.onboarding.modal.steps_total": "{total, plural, other {共{total, number, ::group-off}步}}"
36196
+ };
36197
+ const zhCNUiSettings = {
36198
+ "ui.settings.language.dialog.description": "应用和终端共用此设置,与设置页面中的选项相同。",
36199
+ "ui.settings.language.dialog.loading": "正在加载当前设置……",
36200
+ "ui.settings.language.dialog.retry": "重试",
36201
+ "ui.settings.language.dialog.retrying": "正在重试",
36202
+ "ui.settings.language.dialog.save": "保存",
36203
+ "ui.settings.language.dialog.saved": "已保存",
36204
+ "ui.settings.language.dialog.title": "界面语言",
36205
+ "ui.settings.language.dialog.unavailable": "已连接的服务不提供此对话框所需的设置功能。",
36206
+ "ui.settings.language.effective": "当前生效:{locale}",
36207
+ "ui.settings.language.external_notice": "界面语言已在其他位置更改,现为{language}。",
36208
+ "ui.settings.language.general.description": "选择应用和终端共用的语言。更改会立即保存,不会改写已有对话。",
36209
+ "ui.settings.language.general.effective": "当前应用语言:{locale}",
36210
+ "ui.settings.language.general.last_known": "上次同步的应用语言:{locale}",
36211
+ "ui.settings.language.general.no_resolution": "尚未设置应用语言。",
36212
+ "ui.settings.language.general.pending": "正在保存语言……",
36213
+ "ui.settings.language.general.readback_error": "已确认写入,但无法核实当前设置。再次更改前,先重新连接或重试。",
36214
+ "ui.settings.language.general.saved": "语言已保存",
36215
+ "ui.settings.language.general.system": "跟随系统",
36216
+ "ui.settings.language.general.unavailable_choice": "不可用",
36217
+ "ui.settings.language.general.write_error": "语言未保存,原设置未变。{message}",
36218
+ "ui.settings.language.palette_action": "更改界面语言",
36219
+ "ui.settings.page.title": "设置",
36220
+ "ui.settings.profile.description_anonymous": "个人资料显示在应用中,不会提供给智能体。",
36221
+ "ui.settings.profile.description_authenticated": "个人资料显示在应用中,不会提供给智能体。这些信息来自你的Radient账户。",
36222
+ "ui.settings.profile.display_name.label": "显示名称",
36223
+ "ui.settings.profile.display_name.placeholder": "输入姓名……",
36224
+ "ui.settings.profile.email.label": "电子邮箱",
36225
+ "ui.settings.profile.email.placeholder": "输入邮箱……",
36226
+ "ui.settings.profile.title": "个人资料",
36227
+ "ui.settings.section.interface_language.help": "应用界面和终端共用此语言设置。auto跟随操作系统语言,无法匹配时使用英语。",
36228
+ "ui.settings.section.interface_language.label": "界面语言",
36229
+ "ui.settings.tour.action": "开始导览",
36230
+ "ui.settings.tour.description": "错过了应用导览,或想再熟悉一下?在这里重新开始。",
36231
+ "ui.settings.tour.title": "应用导览",
36232
+ "ui.settings.profile.account_checking": "正在检查Radient账户……",
36233
+ "ui.settings.profile.account_read_failed_retry": "无法读取Radient账户,因此下方的姓名和邮箱只是占位内容,并非你的账户信息。重试。",
36234
+ "ui.settings.profile.account_read_failed_refused": "无法读取Radient账户,因此下方的姓名和邮箱只是占位内容,并非你的账户信息。重试,或重新登录Radient。",
36235
+ "ui.settings.profile.retry": "重试",
36236
+ "ui.settings.profile.retrying": "正在重试"
36237
+ };
34862
36238
  const bundledEnglish = {
34863
36239
  ...enUiAgentMessages,
34864
36240
  ...enUiAgentsDialogs,
@@ -34871,7 +36247,10 @@ const bundledEnglish = {
34871
36247
  ...enUiBrowserChrome,
34872
36248
  ...enUiBrowser,
34873
36249
  ...enUiCanvas,
36250
+ ...enUiChatComposer,
34874
36251
  ...enUiChatComposerMedia,
36252
+ ...enUiChatDialogs,
36253
+ ...enUiChatHeader,
34875
36254
  ...enUiChat,
34876
36255
  ...enUiChatSidebarView,
34877
36256
  ...enUiCodeReview,
@@ -34897,6 +36276,7 @@ const bundledEnglish = {
34897
36276
  ...enUiSchedules,
34898
36277
  ...enUiSettingsAccount,
34899
36278
  ...enUiSettingsAppearance,
36279
+ ...enUiSettingsAppearanceWindowGlass,
34900
36280
  ...enUiSettingsConfiguration,
34901
36281
  ...enUiSettingsIntegrations,
34902
36282
  ...enUiSettings,
@@ -34918,7 +36298,21 @@ const bundledCatalogues = {
34918
36298
  fr: {
34919
36299
  ...frUiConsole,
34920
36300
  ...frUiOnboarding,
34921
- ...frUiSettings
36301
+ ...frUiSettingsAccount,
36302
+ ...frUiSettingsAppearance,
36303
+ ...frUiSettingsConfiguration,
36304
+ ...frUiSettingsIntegrations,
36305
+ ...frUiSettings,
36306
+ ...frUiSettingsModel,
36307
+ ...frUiSettingsNavigation,
36308
+ ...frUiSettingsShortcuts,
36309
+ ...frUiSettingsSpeech,
36310
+ ...frUiSettingsUpdates
36311
+ },
36312
+ hi: {
36313
+ ...hiUiConsole,
36314
+ ...hiUiOnboarding,
36315
+ ...hiUiSettings
34922
36316
  },
34923
36317
  ru: {
34924
36318
  ...ruUiConsole,
@@ -34929,6 +36323,11 @@ const bundledCatalogues = {
34929
36323
  ...viUiConsole,
34930
36324
  ...viUiOnboarding,
34931
36325
  ...viUiSettings
36326
+ },
36327
+ "zh-CN": {
36328
+ ...zhCNUiConsole,
36329
+ ...zhCNUiOnboarding,
36330
+ ...zhCNUiSettings
34932
36331
  }
34933
36332
  };
34934
36333
  const DEFAULT_LOCALE = "en";
@@ -52231,6 +53630,11 @@ function resolveLaunchWindowChrome(input) {
52231
53630
  }
52232
53631
  function attachWindowChrome(options) {
52233
53632
  const { window, mode, userDataDir, headless: headless2, log: log2 } = options;
53633
+ const paintGround = () => {
53634
+ window.setBackgroundColor(
53635
+ options.isGlassActive?.() ? GLASS_TRANSPARENT : colors.ground
53636
+ );
53637
+ };
52234
53638
  let colors = options.colors;
52235
53639
  let cornerGround;
52236
53640
  let themeId;
@@ -52279,7 +53683,7 @@ function attachWindowChrome(options) {
52279
53683
  const nextCorner = isValidChromeColor(report?.cornerGround) ? report.cornerGround.trim() : void 0;
52280
53684
  cornerGround = nextCorner;
52281
53685
  if (typeof report?.themeId === "string") themeId = report.themeId;
52282
- window.setBackgroundColor(colors.ground);
53686
+ paintGround();
52283
53687
  applyOverlay(!window.isDestroyed() && window.isFocused());
52284
53688
  persist();
52285
53689
  log2(
@@ -52327,10 +53731,10 @@ function attachWindowChrome(options) {
52327
53731
  window.on("unmaximize", onResizeState);
52328
53732
  window.on("focus", onFocus);
52329
53733
  window.on("blur", onBlur);
52330
- window.setBackgroundColor(colors.ground);
53734
+ paintGround();
52331
53735
  const sync = () => {
52332
53736
  applyOverlay(!window.isDestroyed() && window.isFocused());
52333
- window.setBackgroundColor(colors.ground);
53737
+ paintGround();
52334
53738
  pushState();
52335
53739
  };
52336
53740
  const dispose = () => {
@@ -52345,6 +53749,166 @@ function attachWindowChrome(options) {
52345
53749
  };
52346
53750
  return { sync, dispose };
52347
53751
  }
53752
+ function windowGlassFilePath(userDataDir) {
53753
+ return path$1.join(userDataDir, WINDOW_GLASS_FILE);
53754
+ }
53755
+ function readPersistedWindowGlass(userDataDir, capability) {
53756
+ const raw = readJson(
53757
+ windowGlassFilePath(userDataDir)
53758
+ );
53759
+ if (raw === null || typeof raw !== "object") return null;
53760
+ return {
53761
+ settings: sanitizeGlassSettings(raw.settings, capability),
53762
+ scheme: raw.scheme === "light" ? "light" : "dark"
53763
+ };
53764
+ }
53765
+ function resolveLaunchWindowGlass(input) {
53766
+ const capability = glassCapabilityFor({
53767
+ platform: input.platform ?? process.platform,
53768
+ osVersion: input.osVersion ?? process.getSystemVersion(),
53769
+ reducedTransparency: input.reducedTransparency ?? electron.nativeTheme.prefersReducedTransparency
53770
+ });
53771
+ let persisted = null;
53772
+ try {
53773
+ persisted = readPersistedWindowGlass(input.userDataDir, capability);
53774
+ } catch {
53775
+ persisted = null;
53776
+ }
53777
+ const settings = persisted?.settings ?? DEFAULT_GLASS_SETTINGS;
53778
+ const scheme = persisted?.scheme ?? "dark";
53779
+ return {
53780
+ capability,
53781
+ settings,
53782
+ scheme,
53783
+ state: stateFor(settings, capability)
53784
+ };
53785
+ }
53786
+ const stateFor = (settings, capability, launchedActive = glassIsActive(settings, capability)) => {
53787
+ const active = glassIsActive(settings, capability);
53788
+ return {
53789
+ capability,
53790
+ settings,
53791
+ active,
53792
+ restartRequired: !capability.liveToggle && active !== launchedActive
53793
+ };
53794
+ };
53795
+ function attachWindowGlass(options) {
53796
+ const { window, userDataDir, restoreGround, log: log2 } = options;
53797
+ let capability = options.initial.capability;
53798
+ let settings = options.initial.settings;
53799
+ let scheme = options.initial.scheme;
53800
+ const launchedActive = glassIsActive(settings, capability);
53801
+ let pinnedTheme = false;
53802
+ let appliedMechanism = launchedActive ? capability.mechanism : "none";
53803
+ const current = () => stateFor(settings, capability, launchedActive);
53804
+ const applyToWindow = () => {
53805
+ if (window.isDestroyed()) return;
53806
+ const active = glassIsActive(settings, capability);
53807
+ try {
53808
+ if (active) {
53809
+ if (capability.mechanism === "vibrancy") {
53810
+ window.setBackgroundColor(GLASS_TRANSPARENT);
53811
+ window.setVibrancy(macVibrancyFor(settings.material));
53812
+ appliedMechanism = "vibrancy";
53813
+ } else if (capability.mechanism === "background-material" && launchedActive) {
53814
+ window.setBackgroundColor(GLASS_TRANSPARENT);
53815
+ window.setBackgroundMaterial(winMaterialFor(settings.material));
53816
+ appliedMechanism = "background-material";
53817
+ }
53818
+ } else if (appliedMechanism === "vibrancy") {
53819
+ window.setVibrancy(null);
53820
+ restoreGround();
53821
+ appliedMechanism = "none";
53822
+ } else if (appliedMechanism === "background-material") {
53823
+ window.setBackgroundMaterial("none");
53824
+ restoreGround();
53825
+ appliedMechanism = "none";
53826
+ }
53827
+ } catch (error) {
53828
+ log2(
53829
+ `[window-glass] applying the material was refused (${String(error)}) - the window keeps its previous look`
53830
+ );
53831
+ }
53832
+ if (active && !pinnedTheme) {
53833
+ electron.nativeTheme.themeSource = scheme;
53834
+ pinnedTheme = true;
53835
+ } else if (active) {
53836
+ electron.nativeTheme.themeSource = scheme;
53837
+ } else if (pinnedTheme) {
53838
+ electron.nativeTheme.themeSource = "system";
53839
+ pinnedTheme = false;
53840
+ }
53841
+ };
53842
+ const persist = () => {
53843
+ if (!writeJsonAtomic(windowGlassFilePath(userDataDir), { settings, scheme }))
53844
+ log2(
53845
+ "[window-glass] the setting could not be saved - it applies to this run and will not survive a restart"
53846
+ );
53847
+ };
53848
+ const push2 = () => {
53849
+ if (window.isDestroyed()) return;
53850
+ window.webContents.send(WINDOW_GLASS_STATE_CHANNEL, current());
53851
+ };
53852
+ const fromOwnWindow = (event) => event.sender === window.webContents;
53853
+ electron.ipcMain.handle(
53854
+ WINDOW_GLASS_GET_CHANNEL,
53855
+ (event) => fromOwnWindow(event) ? current() : null
53856
+ );
53857
+ electron.ipcMain.handle(
53858
+ WINDOW_GLASS_SET_CHANNEL,
53859
+ (event, patch) => {
53860
+ if (!fromOwnWindow(event)) return null;
53861
+ settings = sanitizeGlassSettings(patch, capability, settings);
53862
+ applyToWindow();
53863
+ persist();
53864
+ push2();
53865
+ log2(
53866
+ `[window-glass] applied enabled=${settings.enabled} active=${glassIsActive(settings, capability)} coverage=${settings.coverage} intensity=${settings.intensity} material=${settings.material} mechanism=${capability.mechanism}`
53867
+ );
53868
+ return current();
53869
+ }
53870
+ );
53871
+ electron.ipcMain.handle(WINDOW_GLASS_SCHEME_CHANNEL, (event, next) => {
53872
+ if (!fromOwnWindow(event)) return false;
53873
+ if (next !== "dark" && next !== "light") return false;
53874
+ if (next === scheme) return true;
53875
+ scheme = next;
53876
+ if (glassIsActive(settings, capability)) electron.nativeTheme.themeSource = scheme;
53877
+ persist();
53878
+ return true;
53879
+ });
53880
+ const onNativeThemeUpdated = () => {
53881
+ const next = glassCapabilityFor({
53882
+ platform: process.platform,
53883
+ osVersion: process.getSystemVersion(),
53884
+ reducedTransparency: electron.nativeTheme.prefersReducedTransparency
53885
+ });
53886
+ if (next.supported === capability.supported && next.reason === capability.reason)
53887
+ return;
53888
+ capability = next;
53889
+ settings = sanitizeGlassSettings(settings, capability, settings);
53890
+ applyToWindow();
53891
+ push2();
53892
+ log2(
53893
+ `[window-glass] capability changed supported=${next.supported} reason=${next.reason}`
53894
+ );
53895
+ };
53896
+ electron.nativeTheme.on("updated", onNativeThemeUpdated);
53897
+ if (glassIsActive(settings, capability)) {
53898
+ electron.nativeTheme.themeSource = scheme;
53899
+ pinnedTheme = true;
53900
+ }
53901
+ return {
53902
+ isActive: () => glassIsActive(settings, capability),
53903
+ dispose: () => {
53904
+ electron.ipcMain.removeHandler(WINDOW_GLASS_GET_CHANNEL);
53905
+ electron.ipcMain.removeHandler(WINDOW_GLASS_SET_CHANNEL);
53906
+ electron.ipcMain.removeHandler(WINDOW_GLASS_SCHEME_CHANNEL);
53907
+ electron.nativeTheme.removeListener("updated", onNativeThemeUpdated);
53908
+ if (pinnedTheme) electron.nativeTheme.themeSource = "system";
53909
+ }
53910
+ };
53911
+ }
52348
53912
  const ALLOW = { allowed: true };
52349
53913
  const deny = (reason) => ({ allowed: false, reason });
52350
53914
  const EXTERNAL_SCHEMES = /* @__PURE__ */ new Set([
@@ -52718,6 +54282,23 @@ function guardDownloads(ses, trustedUrls, log2) {
52718
54282
  );
52719
54283
  });
52720
54284
  }
54285
+ function attachWindowSurface(options) {
54286
+ let chromeController = null;
54287
+ const glass = attachWindowGlass({
54288
+ window: options.window,
54289
+ initial: options.glass,
54290
+ userDataDir: options.userDataDir,
54291
+ restoreGround: () => chromeController?.sync(),
54292
+ log: options.log
54293
+ });
54294
+ chromeController = attachWindowChrome({
54295
+ ...options.chrome,
54296
+ window: options.window,
54297
+ userDataDir: options.userDataDir,
54298
+ isGlassActive: () => glass.isActive()
54299
+ });
54300
+ return { glass, chrome: chromeController };
54301
+ }
52721
54302
  const BASE64_FILE_EXTENSIONS = ["csv", "tsv", "xls", "xlsx", "ods"];
52722
54303
  const resolveUserPath = (filePath, cwd) => resolveUserPath$1(filePath, cwd, electron.app.getPath("home"));
52723
54304
  const windowLaunch = resolveWindowLaunchPlan({
@@ -53086,6 +54667,9 @@ function createWindow(initialSession = null, openCatalogue = false, request = ow
53086
54667
  logger.warn(`[window-chrome] ${problem}`, LogFileType.BACKEND);
53087
54668
  console.log(`[window-chrome] ${problem}`);
53088
54669
  }
54670
+ const glass = resolveLaunchWindowGlass({
54671
+ userDataDir: electron.app.getPath("userData")
54672
+ });
53089
54673
  const mainWindow2 = new electron.BrowserWindow({
53090
54674
  /*
53091
54675
  * The frame, per platform, from a pure function so the matrix is exercised on
@@ -53100,12 +54684,20 @@ function createWindow(initialSession = null, openCatalogue = false, request = ow
53100
54684
  colors: chrome.colors
53101
54685
  }),
53102
54686
  /*
53103
- * The ground the OS paints before the renderer's first frame. Without it
53104
- * Electron's default is `#FFF`, so every launch on a dark palette opened with a
53105
- * white flash - the same defect `INSTALL_WINDOW_CANVAS` fixed for the installer
53106
- * window, and a hard-coded palette value that a test keeps honest.
54687
+ * The ground the OS paints before the renderer's first frame, WITH the glass
54688
+ * over it when it is active. Without a ground Electron's default is `#FFF`, so
54689
+ * every launch on a dark palette opened with a white flash - the same defect
54690
+ * `INSTALL_WINDOW_CANVAS` fixed for the installer window. The palette ground
54691
+ * comes first and the glass overrides it only when ACTIVE; inactive keeps that
54692
+ * ground on every platform and darwin adds only the inert `visualEffectState`
54693
+ * above (`groundWithGlass`, pinned by `scripts/window-glass.test.mjs`).
53107
54694
  */
53108
- backgroundColor: chrome.colors.ground,
54695
+ ...groundWithGlass(
54696
+ chrome.colors.ground,
54697
+ glass.settings,
54698
+ glass.capability,
54699
+ process.platform
54700
+ ),
53109
54701
  width: windowLaunch.width,
53110
54702
  height: windowLaunch.height,
53111
54703
  // The layout is verified down to 800x600 and not below: the app rail,
@@ -53176,18 +54768,28 @@ function createWindow(initialSession = null, openCatalogue = false, request = ow
53176
54768
  * silent. `rendererArgumentFlags` below concatenates them, and is `{}` when
53177
54769
  * neither applies, so "adds no option at all" stays literally true.
53178
54770
  */
53179
- ...rendererArgumentFlags(initialSession, openCatalogue, chrome.mode)
54771
+ ...rendererArgumentFlags(
54772
+ initialSession,
54773
+ openCatalogue,
54774
+ chrome.mode,
54775
+ glass
54776
+ )
53180
54777
  }
53181
54778
  });
53182
- const chromeController = attachWindowChrome({
54779
+ const surface = attachWindowSurface({
53183
54780
  window: mainWindow2,
53184
- mode: chrome.mode,
53185
- colors: chrome.colors,
54781
+ glass,
53186
54782
  userDataDir: electron.app.getPath("userData"),
53187
- headless: windowLaunch.mode === "headless",
54783
+ chrome: {
54784
+ mode: chrome.mode,
54785
+ colors: chrome.colors,
54786
+ headless: windowLaunch.mode === "headless",
54787
+ log: (line) => logger.info(line, LogFileType.BACKEND)
54788
+ },
53188
54789
  log: (line) => logger.info(line, LogFileType.BACKEND)
53189
54790
  });
53190
- mainWindow2.on("closed", () => chromeController.dispose());
54791
+ mainWindow2.on("closed", () => surface.chrome.dispose());
54792
+ mainWindow2.on("closed", () => surface.glass.dispose());
53191
54793
  if (process.platform !== "darwin") {
53192
54794
  mainWindow2.on("closed", () => miniView?.dispose());
53193
54795
  }
@@ -53313,7 +54915,7 @@ function launchArgumentFlags(initialSession, openCatalogue) {
53313
54915
  if (openCatalogue) return { additionalArguments: [OPEN_CATALOGUE_FLAG] };
53314
54916
  return {};
53315
54917
  }
53316
- function rendererArgumentFlags(initialSession, openCatalogue, chromeMode) {
54918
+ function rendererArgumentFlags(initialSession, openCatalogue, chromeMode, glass) {
53317
54919
  const flags = [
53318
54920
  /*
53319
54921
  * The chrome facts, and they are ALWAYS written - unlike the conversation or
@@ -53323,6 +54925,9 @@ function rendererArgumentFlags(initialSession, openCatalogue, chromeMode) {
53323
54925
  * `readWindowChromeArgument` for why the guess fails towards `native`.
53324
54926
  */
53325
54927
  windowChromeArgumentFor(process.platform, chromeMode),
54928
+ /* The glass fact, ALWAYS written (`off` included) for the chrome entry's
54929
+ * reason: the first paint's ground depends on it. */
54930
+ windowGlassArgument(glass.state, glass.scheme),
53326
54931
  ...launchArgumentFlags(initialSession, openCatalogue).additionalArguments ?? [],
53327
54932
  ...devDriverWebPreferences.additionalArguments ?? [],
53328
54933
  ...telemetryWebPreferences.additionalArguments ?? []