@wrongstack/webui 1.0.19 → 1.0.24

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 (132) hide show
  1. package/dist/assets/{AgentRosterView-D4TuVXe8.js → AgentRosterView-Dq8Xa0WK.js} +4 -4
  2. package/dist/assets/{AnalyticsDashboard-DmQd0E0V.js → AnalyticsDashboard-DgqJODVI.js} +1 -1
  3. package/dist/assets/{AudienceMemoryPanel-DHJM4rf1.js → AudienceMemoryPanel-BVGdDVTT.js} +1 -1
  4. package/dist/assets/{ChangesView-CZ-nCe26.js → ChangesView-BVyLENBb.js} +1 -1
  5. package/dist/assets/ChimeraReviewsView-CTuxzgTC.js +1 -0
  6. package/dist/assets/ChronicleDashboard-BRP7D6RZ.js +1 -0
  7. package/dist/assets/{CodeEditor-CLscjkIR.js → CodeEditor-k3z3M0NG.js} +1 -1
  8. package/dist/assets/{CodeMap-CdVy9Q7V.js → CodeMap-CvHNQZEF.js} +1 -1
  9. package/dist/assets/{CronJobsPanel-TcZy_W2t.js → CronJobsPanel-GTK038V9.js} +1 -1
  10. package/dist/assets/{DeadCodeScanPanel-BOD2JEyf.js → DeadCodeScanPanel-DX4OEuyp.js} +1 -1
  11. package/dist/assets/{DebugDashboard-DFPNPzQ_.js → DebugDashboard-CKp3sa_k.js} +1 -1
  12. package/dist/assets/{DesignGalleryView-BXABwAji.js → DesignGalleryView-DVUTYaP6.js} +1 -1
  13. package/dist/assets/{GoalView-Cepqrg9l.js → GoalView-D8G8e8YG.js} +1 -1
  14. package/dist/assets/{KanbanView-FSePkLch.js → KanbanView-BMXGDqGo.js} +2 -2
  15. package/dist/assets/{MailboxDetailView-QyNmt1Gv.js → MailboxDetailView-CylnzTVc.js} +1 -1
  16. package/dist/assets/{MemoryDrawer-BZsyD1dh.js → MemoryDrawer-DJ0Y98Z8.js} +1 -1
  17. package/dist/assets/{MemoryManager-IHmhWn4P.js → MemoryManager-DfcsYPUB.js} +1 -1
  18. package/dist/assets/{ProcessMonitor-Bz0jZvHJ.js → ProcessMonitor-BnQ3vJtn.js} +1 -1
  19. package/dist/assets/{PromptJournalView-Ct8cLcGU.js → PromptJournalView-D7k8Yh5a.js} +1 -1
  20. package/dist/assets/{ProviderTestView-Dy3k2bVu.js → ProviderTestView-DSd6kkWT.js} +1 -1
  21. package/dist/assets/{QueuePanel-oVkTB68Q.js → QueuePanel-79KiyZWD.js} +1 -1
  22. package/dist/assets/{RefreshDebugView-_XPrBDq3.js → RefreshDebugView-s6MyGpPq.js} +1 -1
  23. package/dist/assets/{RepositoryHistoryView-Wlnvi5r1.js → RepositoryHistoryView-CWi_Zo3F.js} +1 -1
  24. package/dist/assets/{RequirementIntakeView-Cj5arGFF.js → RequirementIntakeView-D_Ea20fx.js} +1 -1
  25. package/dist/assets/{SageTabs-qrBn3VQr.js → SageTabs-D6eTg3ix.js} +2 -2
  26. package/dist/assets/SddFlowGraph-B-ptkFX6.js +1 -0
  27. package/dist/assets/SddHub-CSVfLGpr.js +2 -0
  28. package/dist/assets/{SessionInspectView-CuRk2DS0.js → SessionInspectView-NSpj5WEN.js} +1 -1
  29. package/dist/assets/{SessionList-BgRb1Mp4.js → SessionList-BYRCs1AK.js} +1 -1
  30. package/dist/assets/{SessionsDashboard-CSkm28Bx.js → SessionsDashboard-mF4PzdKY.js} +1 -1
  31. package/dist/assets/{SetupScreen-CNcJ_9O9.js → SetupScreen-BUZeJSZi.js} +1 -1
  32. package/dist/assets/SkillDetailView-B9BFyB1i.js +3 -0
  33. package/dist/assets/{TechStackView-BHiGCRBT.js → TechStackView-CXJilX0M.js} +2 -2
  34. package/dist/assets/{TerminalPanel-7VeXK8LB.js → TerminalPanel-CAXevSAa.js} +1 -1
  35. package/dist/assets/{activity-BVbAv0x7.js → activity-B3wutYIE.js} +4 -4
  36. package/dist/assets/activity-Be03cc7g.js +10 -0
  37. package/dist/assets/activity-CiYZ3y4e.js +10 -0
  38. package/dist/assets/activity-CmIA2MhR.js +10 -0
  39. package/dist/assets/activity-Cp5GhldB.js +10 -0
  40. package/dist/assets/activity-DFCf7l5d.js +10 -0
  41. package/dist/assets/{activity-Du_fOnvF.js → activity-EbNUY7Ci.js} +4 -4
  42. package/dist/assets/{chat-store-C-PKlsCR.js → chat-store-C7InoWAO.js} +1 -1
  43. package/dist/assets/common-Bjl7V12m.js +1 -0
  44. package/dist/assets/common-BtyQBZBN.js +1 -0
  45. package/dist/assets/common-D0QL7rwb.js +1 -0
  46. package/dist/assets/common-DJRPtYAt.js +1 -0
  47. package/dist/assets/common-DPPTV3yw.js +1 -0
  48. package/dist/assets/common-DvjdaRhB.js +1 -0
  49. package/dist/assets/common-opV6EoLd.js +1 -0
  50. package/dist/assets/config-store-BbL0WxLE.js +21 -0
  51. package/dist/assets/{i18n--QdD6NCn.js → i18n-Dv97urcO.js} +3 -3
  52. package/dist/assets/index-CON0Nbm4.css +1 -0
  53. package/dist/assets/index-DX6tHUzs.js +177 -0
  54. package/dist/assets/roster-ws-Cv_PHlEV.js +1 -0
  55. package/dist/assets/settings-BCvuzOJ6.js +1 -0
  56. package/dist/assets/settings-DMPKd-4K.js +1 -0
  57. package/dist/assets/settings-DxQ2452f.js +1 -0
  58. package/dist/assets/settings-Dz3StaVx.js +1 -0
  59. package/dist/assets/settings-EBW1mlXc.js +1 -0
  60. package/dist/assets/settings-Er2LHp9d.js +1 -0
  61. package/dist/assets/settings-EzznCDaX.js +1 -0
  62. package/dist/assets/stores-DXn5tdr7.js +7 -0
  63. package/dist/assets/ui-store-DxDwFHNK.js +1 -0
  64. package/dist/assets/{view-navigation-DTs4cSQ6.js → view-navigation-CpIPxhZp.js} +1 -1
  65. package/dist/components/ChatInput/skill-mention-picker.d.ts +10 -0
  66. package/dist/components/CustomRosterPanel.d.ts +0 -1
  67. package/dist/components/OfficeMapCanvas.d.ts +0 -7
  68. package/dist/components/SettingsPanel/BrainSection.d.ts +1 -1
  69. package/dist/components/SettingsPanel/JevSection.d.ts +4 -0
  70. package/dist/components/SettingsPanel/OAuthLoginSection.d.ts +2 -0
  71. package/dist/components/SettingsPanel/ProviderSection.d.ts +5 -5
  72. package/dist/components/SettingsPanel/brain-section-options.d.ts +1 -1
  73. package/dist/components/SettingsPanel/contracts.d.ts +1 -0
  74. package/dist/components/SettingsPanel/official-servers.d.ts +1 -0
  75. package/dist/components/SettingsPanel/use-brain-section.d.ts +28 -0
  76. package/dist/components/SkillDetailView.d.ts +1 -1
  77. package/dist/components/chronicle-event-detail.d.ts +51 -0
  78. package/dist/components/context-dashboard-sections.d.ts +79 -0
  79. package/dist/components/use-office-map-canvas.d.ts +42 -0
  80. package/dist/components/use-skill-detail.d.ts +177 -0
  81. package/dist/components/vector-memory-panel/model.d.ts +9 -0
  82. package/dist/hooks/useProviderModels.d.ts +2 -0
  83. package/dist/hooks/useWebSocket.d.ts +3 -3
  84. package/dist/hooks/ws-handlers/brain-handlers.d.ts +18 -0
  85. package/dist/hooks/ws-handlers/goal-handlers.d.ts +7 -0
  86. package/dist/hooks/ws-handlers/misc-handlers.d.ts +2 -21
  87. package/dist/index.html +9 -9
  88. package/dist/index.js +15497 -12864
  89. package/dist/lib/auth-operation.d.ts +5 -0
  90. package/dist/lib/sdd-theme.d.ts +2 -2
  91. package/dist/lib/ws-client-actions.d.ts +2 -0
  92. package/dist/lib/ws-client-domain-methods.d.ts +1 -1
  93. package/dist/lib/ws-client-session-methods.d.ts +1 -1
  94. package/dist/lib/ws-client.d.ts +0 -3
  95. package/dist/stores/council-log-store.d.ts +4 -0
  96. package/dist/stores/ui-store-types.d.ts +1 -1
  97. package/dist/types/client-message.d.ts +13 -0
  98. package/dist/types/jev.d.ts +62 -0
  99. package/dist/types/runtime.d.ts +5 -3
  100. package/dist/types/server-message-system.d.ts +4 -0
  101. package/dist/types/system.d.ts +2 -0
  102. package/package.json +10 -10
  103. package/dist/assets/ChimeraReviewsView-CNeRLesP.js +0 -1
  104. package/dist/assets/ChronicleDashboard-CYELq7EO.js +0 -1
  105. package/dist/assets/SddFlowGraph-DS8R2zEj.js +0 -1
  106. package/dist/assets/SddHub-C8pHQYSM.js +0 -2
  107. package/dist/assets/SkillDetailView-Bc9owpaX.js +0 -3
  108. package/dist/assets/activity-1wlPY6yi.js +0 -10
  109. package/dist/assets/activity-BmJTU8kX.js +0 -10
  110. package/dist/assets/activity-By_aWEsY.js +0 -10
  111. package/dist/assets/activity-Cps_29WN.js +0 -10
  112. package/dist/assets/activity-p_2o4eC6.js +0 -10
  113. package/dist/assets/common-BXosnbIt.js +0 -1
  114. package/dist/assets/common-CzfPgMjC.js +0 -1
  115. package/dist/assets/common-DDDPz7Dv.js +0 -1
  116. package/dist/assets/common-DYx9oSoC.js +0 -1
  117. package/dist/assets/common-DZ-05t4z.js +0 -1
  118. package/dist/assets/common-MjX8fcng.js +0 -1
  119. package/dist/assets/common-ipsuLC3n.js +0 -1
  120. package/dist/assets/config-store-xSv1mChc.js +0 -21
  121. package/dist/assets/index-DiX5j910.css +0 -1
  122. package/dist/assets/index-FWwLmwjx.js +0 -177
  123. package/dist/assets/roster-ws-CxKDc-ET.js +0 -1
  124. package/dist/assets/settings-B5Jy-ObI.js +0 -1
  125. package/dist/assets/settings-BXTJJ4n-.js +0 -1
  126. package/dist/assets/settings-BcXAVecM.js +0 -1
  127. package/dist/assets/settings-ByPfZHGm.js +0 -1
  128. package/dist/assets/settings-CCe4iHcn.js +0 -1
  129. package/dist/assets/settings-D2GLiaDO.js +0 -1
  130. package/dist/assets/settings-gB9nKL3f.js +0 -1
  131. package/dist/assets/stores-2kakt8j9.js +0 -7
  132. package/dist/assets/ui-store-DC3mkswy.js +0 -1
@@ -1 +0,0 @@
1
- var e=`Settings`,t=`Configure every aspect of your agent workspace`,n={general:`General`,provider:`Provider`,connection:`Connections`,agent:`Agent`,execution:`Execution`,fallbacks:`Fallbacks`,routing:`Routing`,fleet:`Fleet`,integrations:`Integrations`,chimera:`Chimera`,context:`Context`,logs:`Logs`,security:`Security`,display:`Display`,displayDesc:`Workbench chrome, status chip, refine timers, and tool/memory injection toggles — mirrors the TUI SettingsPicker.`,generalDesc:`Appearance, language, and display preferences — mirrors the TUI SettingsPicker.`,providerDesc:`API keys, saved providers, and the provider catalog.`,connectionDesc:`WebSocket server URL and connection health.`,agentDesc:`Autonomy, prompt refinement, reasoning, and model routing.`,executionDesc:`Iteration caps, exit behavior, and process circuit breaker.`,fallbacksDesc:`Model fallback chain, favorites, and named fallback profiles.`,routingDesc:`Per-phase and per-role model route matrix.`,fleetDesc:`Subagent concurrency, streaming, and next-step prediction.`,integrationsDesc:`HQ client, MCP servers, and Telegram notifications.`,chimeraDesc:`Post-session code review agent configuration.`,contextDesc:`Feature flags, context strategy, compactor, and plugin controls.`,logsDesc:`Log level, audit detail, filesystem access scope, and debug stream.`,securityDesc:`Brain decision control, shadow agent, and tool access.`,fonts:`Fonts`,fontsDesc:`Interface, chat, editor and terminal fonts; size, line height, and ligatures.`},r={themeHeading:`Theme`,themeLight:`Light`,themeDark:`Dark`,themeSystem:`System`,themeSystemHint:`System follows your OS-level light/dark preference.`,preferencesHeading:`Display Preferences`,compactDensity:`Compact density`,compactDensityHint:`Tighter spacing throughout the chat.`,soundOnComplete:`Sound on completion`,soundOnCompleteHint:`Play a soft chime when a run finishes.`,titleAnimation:`Title animation`,titleAnimationHint:`Show animated terminal title in the CLI.`,showThinkingLabel:`Show thinking logs`,showThinkingHint:`Display completed reasoning blocks in the chat history.`,groupToolCallsLabel:`Group tool calls`,groupToolCallsHint:`Collapse consecutive tool calls into a single chip.`,autoCollapseInputLabel:`Auto-collapse input under history`,autoCollapseInputHint:`When a session with messages loads, collapse the composer under the history. Off by default — input stays expanded until you collapse it manually.`,languageHeading:`Language`,languageLabel:`Interface language`,languageHint:`Changes only the interface text. Prompts, skills, and model output are not affected.`,statuslineModeLabel:`Statusline mode (CLI/TUI)`,statuslineModeHint:`Density of the TUI statusline.`,statuslineModeDetailed:`Detailed`,statuslineModeMinimum:`Minimum`,statuslineModeNoColor:`No color`,animationStyleLabel:`Animation style (CLI/TUI)`,animationStyleHint:`Animation for the TUI working-state chip.`,animationStyleRainbow:`Rainbow`,animationStyleWave:`Wave`,animationStylePulse:`Pulse`,animationStyleDots:`Dots`,animationStyleBreathe:`Breathe`,animationStyleStatic:`Static`,animationStyleCycle:`Cycle`,thinkingWordLabel:`Thinking word (CLI/TUI)`,thinkingWordHint:`Word shown in the TUI status chip. Single short word.`,paletteHeading:`Color palette`,paletteSwitcherTitle:`Color palette`,paletteHint:`Pick the main color (and its derivatives). Neutral surfaces stay the same.`,paletteSignal:`Signal`,paletteEmeraldGold:`Emerald & Gold`,paletteBlueNavy:`Blue Navy`,palettePurplePink:`Purple & Pink`,paletteCyanTeal:`Cyan & Teal`,paletteRoseCopper:`Rose & Copper`,paletteIndigoAmber:`Indigo & Amber`,paletteSageSand:`Sage & Sand`,paletteSlateViolet:`Slate & Violet`,paletteCoralMint:`Coral & Mint`,paletteArcticEmber:`Arctic & Ember`,paletteMossRust:`Moss & Rust`},i={heading:`Model`,loading:`Loading models...`,notFound:`No models found for this provider. The catalog might be empty or still loading.`,selectProviderFirst:`Select a provider first`,context:`{{count}}k context`},a={providerHealth:{heading:`Provider Health`,hint:`Which provider/model pairs are healthy, degraded, or blocked — and why.`,refresh:`Refresh`,empty:`No providers tracked yet.`,summary:`{{blocked}} blocked · {{degraded}} degraded · {{healthy}} healthy`,totalFailures:`failures`,rateLimits:`rate limits`,state:{blocked:`Blocked`,degraded:`Degraded`,healthy:`Healthy`},blocked:`Blocked`,degraded:`Degraded`,consecutive:`consecutive failures`,retryNow:`Retry now`,clear:`Clear`,allHealthy:`All tracked providers are healthy.`,statSuccesses:`successes`,statFailures:`failures`,statRateLimits:`rate limits`,statConsecutive:`consecutive`,lastError:`Last error`,recentErrors:`Recent errors`,autoRecovery:`Auto-recovers at`,expired:`Expired`,remainingSecs:`{{secs}}s`,remainingMins:`{{mins}}m`,remainingHours:`{{hours}}h {{mins}}m`,explainHealthy:`Responding normally.`,explain402:`Billing limit reached (402). Blocked for ~15 minutes until quota resets.`,explain403quota:`Usage limit reached for this billing cycle. Blocked until the next cycle resets (~15 min).`,explain403auth:`Permission/auth error. Non-retryable — check your API key and access rights.`,explain429:`Rate limit hit (429). Temporary throttle — recovers automatically.`,explain529:`Server overloaded (529). The provider is under heavy load.`,explain5xx:`Server error ({{status}}). Temporary backend issue.`,explainNetwork:`Network unreachable. Check your internet or the provider's status page.`,explainTimeout:`Request timed out (408). The provider was slow to respond.`,explainStreamHang:`Stream stalled (599). The provider stopped mid-response.`,explainQuota:`Quota exhausted. Blocked until the reset window.`,explainUnknown:`Failure kind: {{kind}} / status: {{status}}.`},wsUrlLabel:`WebSocket Server URL`,wsUrlPlaceholder:`ws://localhost:3456`,wsUrlHint:`URL of the agent WebSocket server. The server runs alongside the CLI.`,startingHeading:`Starting the WebSocket Server`,startingBody:`For development, run ./dev.ps1 from the repo root (optionally set WS_HOST/WS_PORT first). Otherwise launch the WebUI with the CLI: wstack --webui.`,healthHeading:`Connection health`,healthHint:`Live ownership, storage, queue, watcher, and latency report for project services.`,healthRefresh:`Refresh`,healthLoading:`Checking services…`,healthUnknown:`Health unknown`,healthDisconnected:`The WebUI WebSocket is disconnected.`,healthRestartRequired:`Restart the backend once to activate connection health reporting.`,healthOptional:`On demand`,endpointInvalidBadge:`socket path too long`,endpointInvalidRemedy:`The IPC socket path exceeds this platform's length limit, so the shared daemon cannot start. Queries fall back to a slower process-local mode. Remedy: set a shorter TMPDIR (e.g. export TMPDIR=/tmp) and restart WrongStack.`,healthCounts:`{{healthy}} healthy · {{attention}} attention · {{sleeping}} sleeping`,healthOverall:{healthy:`Required services healthy`,degraded:`Required service degraded`,error:`Required service unavailable`},healthStatus:{healthy:`Healthy`,degraded:`Degraded`,offline:`Sleeping`,unavailable:`Unavailable`,error:`Error`},services:{kanban:{label:`Kanban IPC`},mailbox:{label:`Mailbox IPC`}},serviceActionRestart:`Restart {{label}}`,webuiTransport:`WebUI transport`,serviceAutoRestarting:`Auto-restarting…`},o={subscriptionHeading:`Subscription login`,apiKeysHeading:`API key providers`,apiKeysBody:`Pick a provider from the catalog and add an API key, or manage saved providers.`,tabCatalog:`Catalog`,tabSaved:`Saved ({{count}})`,searchPlaceholder:`Search {{count}} providers (name / id / family)…`,loadingCatalog:`Loading catalog...`,noMatch:`No providers match "{{query}}".`,configured:`Configured`,reachable:`Reachable`,envVar:`ENV: {{var}}`,modelCount_one:`{{count}} model`,modelCount_other:`{{count}} models`,keyPlaceholder:`{{name}} API key`,orEnv:`Or set {{env}} in the environment instead.`,addApiKey:`Add API key`,manageKeys:`Manage your API keys and provider configurations`,addProvider:`Add Provider`,addCustomHeading:`Add Custom Provider`,localServers:`Local servers — click to pre-fill:`,providerIdPlaceholder:`Provider ID (e.g. my-llm-server)`,apiKeyOptionalPlaceholder:`API Key (optional)`,noSaved:`No saved providers yet`,noSavedHint:`Add a provider to get started`,apiKeysLabel:`API Keys`,savedProviderCount_one:`{{count}} provider`,savedProviderCount_other:`{{count}} providers`,keyCount_one:`{{count}} key configured`,keyCount_other:`{{count}} keys configured`,activeKeyCount_one:`{{count}} active key`,activeKeyCount_other:`{{count}} active keys`,addKey:`Add Key`,noKeys:`No keys configured`,active:`Active`,setActive:`Set Active`,keyLabelPlaceholder:`Key label (e.g. default, production)`,apiKeyPlaceholder:`API key`,saveKey:`Save Key`,savedToast:`Saved key for {{name}}`},s={addCustom:`Add custom model`,addCustomTitle:`Add custom model`,addFromCatalog:`Add from catalog`,catalogSearchPlaceholder:`Search models.dev catalog…`,catalogSearchTitle:`Search models.dev catalog`,colActions:`Actions`,colCaps:`Capabilities`,colContext:`Context`,colCost:`Cost`,colModalities:`Modalities`,colModel:`Model`,colOutput:`Output`,colSource:`Source`,editModel:`Edit model`,emptyState:`No models yet — add from the catalog or create a custom model.`,fieldContext:`Context window`,fieldCostInput:`Input cost`,fieldCostOutput:`Output cost`,fieldDescription:`Description`,fieldFamily:`Family`,fieldInputLimit:`Input limit`,fieldInputModalities:`Input modalities`,fieldLastUpdated:`Last updated`,fieldName:`Name`,fieldOutput:`Max output`,fieldOutputModalities:`Output modalities`,fieldReleaseDate:`Release date`,modelAdded:`Added {{model}}`,modelRemoved:`Removed {{model}}`,modelSaved:`Saved {{model}}`,noResults:`No models found`,removeModel:`Remove model`,sectionCapabilities:`Capability flags`,sectionDates:`Dates`,sectionIdentity:`Identity`,sectionLimits:`Limits`,sectionModalities:`Modalities`,sectionPricing:`Pricing (per 1M tokens, USD)`,tabForm:`Form`,tabRawJson:`Raw JSON`,typeToSearch:`Type to search the catalog…`,useModel:`Use {{model}}`,usingModel:`Using {{model}}`,filterPlaceholder:`Filter models…`},c={status:{connected:`Connected`,connecting:`Connecting`,sleeping:`Sleeping`,discovering:`Discovering`,error:`Error`,stopped:`Stopped`,unknown:`Unknown`},disabled:`MCP servers are disabled.`,wakeTitle:`Wake server`,sleepTitle:`Sleep server`,discoverTitle:`Discover tools`,editTitle:`Edit`,removeTitle:`Remove`,statusLabel:`Status:`,enabledLabel:`Enabled:`,yes:`Yes`,no:`No`,descriptionLabel:`Description:`,pidLabel:`PID:`,errorLabel:`Error:`,toolsLabel:`Tools ({{count}}):`,noTools:`No tools discovered yet`,serverNameRequired:`Server name is required`,dialogTitleEdit:`Edit MCP Server`,dialogTitleAdd:`Add MCP Server`,dialogTitleAddCustom:`Add Custom MCP Server`,fieldName:`Name`,fieldNamePlaceholder:`e.g., github, filesystem`,fieldTransport:`Transport`,fieldUrl:`URL`,fieldCommand:`Command`,fieldCommandPlaceholder:`e.g., npx`,fieldArgs:`Args`,fieldArgsHint:`(space-separated)`,fieldArgsPlaceholder:`e.g., -y @modelcontextprotocol/server-github`,fieldEnv:`Env vars`,fieldEnvHint:`(KEY=value, one per line)`,fieldDescription:`Description`,fieldDescriptionPlaceholder:`GitHub MCP server for repository access`,enableServer:`Enable server`,lazyConnect:`Lazy connect`,lazyConnectHint:`(don't start until first tool call; auto-sleeps when idle)`,saveChanges:`Save Changes`,addServer:`Add Server`,requires:`Requires: {{vars}}`,added:`Added`,heading:`MCP Servers`,summary:`{{connected}} connected · {{sleeping}} sleeping · {{total}} total`,addCustom:`Add Custom`,tabRecommended:`Recommended`,tabServers:`Servers`,tabAddCustom:`Add Custom`,recommendedBody:`One-click add for popular MCP servers. Click Add to pre-fill the configuration, then confirm. Servers requiring credentials will need their env vars set before use.`,loadingServers:`Loading servers...`,noServers:`No MCP servers configured`,noServersHint:`Switch to the Recommended tab to add popular servers, or Add Custom for your own.`,addCustomBody:`Configure a custom MCP server with stdio, SSE, or HTTP transport.`,addCustomBodyHint:`For popular servers, use the Recommended tab instead — everything is pre-configured for you.`,removeConfirmTitle:`Remove server "{{name}}"?`,removeConfirmBody:`This removes the MCP server from your configuration.`,toastAdded:`Server "{{name}}" added`,toastRemoved:`Server "{{name}}" removed`,toastDiscovered:`Discovered {{count}} tools from "{{name}}"`,toastSleeping:`Server "{{name}}" is now sleeping`,toastConnected:`Server "{{name}}" connected`,toastReconnected:`Server "{{name}}" reconnected`,toastDisconnected:`Server "{{name}}" disconnected: {{reason}}`,toastError:`Server "{{name}}" error: {{error}}`},l={title:`Clear saved allowlist?`,body_one:`This will remove the pinned model for {{provider}}. The model picker will fall back to the models.dev catalog.`,body_other:`This will remove the {{count}} pinned models for {{provider}}. The model picker will fall back to the models.dev catalog.`,undoHint:`You can undo this for 8 seconds after confirming.`,keepTitle:`Keep the allowlist (Esc)`,clearTitle:`Clear the allowlist (Enter)`,clear:`Clear allowlist`},u={termsWarning:`Sign in with a subscription instead of an API key. Using a subscription outside its official client may violate the provider's Terms — your account could be rate-limited or banned. An API key is the sanctioned path for programmatic use.`,signIn:`Sign in`,waitingBrowser:`Waiting for you to sign in…`,openSignIn:`Open sign-in page`,pasteLoopbackBusy:`Loopback port busy — paste the redirect URL`,pasteCantReach:`Browser can't reach this server? Paste the redirect URL`,submit:`Submit`,enterCode:`Enter this code at the verification page:`,openVerification:`Open verification page`,waitingCode:`Waiting for authorization…`,exchanging:`Exchanging tokens…`,fetchingModels:`Fetching models…`,signedIn:`Signed in.`,signedInToast:`Signed in — {{provider}}`,signInFailed:`Sign-in failed`,accountCount_one:`{{count}} account saved`,accountCount_other:`{{count}} accounts saved`,active:`Active`,inactive:`Inactive`,retry:`Retry`,retryLogin:`Re-authenticate this account`,newAccount:`New account`,aliasPlaceholder:`e.g. {{default}}`},d={autonomyHeading:`Autonomy & Behavior`,autonomyModeLabel:`Autonomy mode`,autonomyModeHint:`How independently the agent proceeds between turns.`,autonomyModeOff:`Off — full manual control`,autonomyModeSuggest:`Suggest — suggests next steps`,autonomyModeAuto:`Auto — brief confirmation delay`,autonomyModeEternal:`Eternal — autonomous until goal done`,autonomyModeEternalParallel:`Eternal Parallel — multi-agent fleet`,autoProceedDelayLabel:`Auto-proceed delay`,autoProceedDelayHint:`Milliseconds before the agent auto-proceeds in Auto mode. 0 = immediate.`,yoloLabel:`YOLO mode`,yoloHint:`Run tool calls without asking — except the damaging kinds listed below.`,yoloConfirmHeading:`Still ask about`,yoloConfirmIntro:`YOLO runs everything else unattended. These are the kinds of damage it stops and asks you about first.`,yoloConfirmLockedNote:`These two always ask. They write the files that decide whether you get asked at all, so turning them off would let the agent switch its own approval system off.`,yoloKindLocked:`always asks`,yoloKind:{"disk-wipe":{label:`Wipe a disk`,hint:`mkfs, dd to a raw device, format C:, fork bomb`},"system-halt":{label:`Shut down or restart`,hint:`shutdown, reboot`},"delete-outside":{label:`Delete outside the project`,hint:`recursive force-delete that leaves the project, or hits a system or home root`},"git-history":{label:`Rewrite git history`,hint:`reset --hard, clean -f, push --force, filter-branch`},publish:{label:`Publish or deploy`,hint:`npm publish, docker push, kubectl delete namespace`},"download-and-run":{label:`Run downloaded code`,hint:`curl | sh, and inline payloads that fetch then execute`},"bulk-delete":{label:`Delete in bulk`,hint:`find -exec rm, inline rmSync across many paths`},"agent-state":{label:`Write WrongStack's own state`,hint:`config.json, trust.json, auth.json`},"credential-bind":{label:`Bind an API key to an endpoint`,hint:`attaching a well-known key to a provider URL`}},refineHeading:`Prompt Refinement`,enableRefineLabel:`Enable refine`,enableRefineHint:`Rewrite prompts before sending — clearer instructions, better results.`,refineDelayLabel:`Refine delay`,refineDelayHint:`Countdown before the refined prompt auto-sends.`,refineLanguageLabel:`Refine language`,refineLanguageHint:`Keep your language or translate to English for the model.`,refineLanguageOriginal:`Original — keep your language`,refineLanguageEnglish:`English — translate to English`,refinerProviderLabel:`Refiner provider`,refinerProviderHint:`Provider for goal refinement. Select one from your configured providers.`,refinerProviderDefault:`Session provider`,refinerModelLabel:`Refiner model`,refinerModelHint:`Model for goal refinement. Requires a refiner provider first.`,refinerModelDefault:`Session model`,refinerProfileLabel:`Refiner fallback profile`,refinerProfileHint:`Named fallback profile for goal refinement. Overrides provider+model.`,refinerProfileDefault:`None — use provider+model or session defaults`,reasoningHeading:`Reasoning & Cache`,reasoningModeLabel:`Reasoning mode`,reasoningModeHint:`Control how the model uses extended thinking. Auto = provider default.`,reasoningModeAuto:`Auto — provider default`,reasoningModeOn:`On — force thinking on`,reasoningModeOff:`Off — force thinking off`,reasoningEffortLabel:`Reasoning effort`,reasoningEffortAuto:`Auto (general)`,reasoningEffortAutoHint:`Project setting: {{value}}`,reasoningEffortHint:`How much compute the model spends thinking. Only sent when the model supports it.`,reasoningEffortNone:`None`,reasoningEffortMinimal:`Minimal`,reasoningEffortLow:`Low`,reasoningEffortMedium:`Medium`,reasoningEffortHigh:`High`,reasoningEffortXhigh:`Extra High`,reasoningEffortMax:`Max`,preserveThinkingLabel:`Preserve thinking`,preserveThinkingHint:`Keep reasoning blocks across turns for context continuity.`,cacheTtlLabel:`Cache TTL`,cacheTtlHint:`Prompt cache time-to-live. 1h costs more on write but saves on repeat reads (Anthropic).`,cacheTtlDefault:`Default — provider default`,cacheTtl5m:`5 minutes`,cacheTtl1h:`1 hour`,capsHint:`Use wstack models caps to check what the current model supports. Unsupported settings are silently omitted per-request.`,routingHeading:`Model Routing`,routingRouteKey:`Route key`,routingPhasesGroup:`Phases`,routingRolesGroup:`Roles — {{label}}`,routingCustomGroup:`Existing custom routes`,routingTargetAria:`Model route target`,routingTargetEmpty:`— Clear route —`,routingTargetProfilesGroup:`Fallback Profiles`,routingTargetModelsGroup:`Models (provider/model)`,routingSet:`Set`,routingReasoningModeAria:`New route reasoning mode`,routingReasoningEffortAria:`New route reasoning effort`,routingReasoningPreserveAria:`New route reasoning preservation`,routingReasoningModeFor:`Reasoning mode for {{key}}`,routingReasoningEffortFor:`Reasoning effort for {{key}}`,routingReasoningPreserveFor:`Reasoning preservation for {{key}}`,noRoutes:`No model routes yet.`,leaderModel:`leader model`,autonomyDelayMsLabel:`Auto-proceed delay`,autonomyDelayMsHint:`Milliseconds before the agent auto-proceeds in Auto mode. 0 = immediate.`,refineCountdownLabel:`Refine countdown`,refineCountdownHint:`Grace period before the refined prompt auto-sends (milliseconds).`,reasoningEffortModelSet:`levels offered by the active model`,reasoningEffortUnsupported:`Not offered by this model (supported: {{levels}}) — the setting will be omitted.`},f={heading:`Execution`,maxIterationsLabel:`Max iterations per run`,maxIterationsHint:`Hard cap on LLM turns per agent.run().`,autoProceedMaxIterationsLabel:`Auto-proceed max iterations`,autoProceedMaxIterationsHint:`Stop auto-proceed after N iterations. 0 = unlimited.`,confirmExitLabel:`Confirm before exit`,confirmExitHint:`First Ctrl+C aborts work, second confirms exit.`,chimeLabel:`Chime on completion`,chimeHint:`Terminal bell when an agent run finishes.`,breakerLabel:`Process circuit breaker`,breakerHint:`Gate bash/exec after repeated failures; trips arm the kill/reset countdown.`,breakerTimeoutLabel:`Breaker kill/reset timeout`,breakerTimeoutHint:`Delay before automatic kill/reset when the breaker trips. 0 = manual recovery.`,availabilityHeading:`Provider/model availability calendar`,availabilityHint:`Prevent autonomous and overnight runs from using selected providers or models during recurring windows.`},p={chimeraDedicatedHeading:`Chimera — Post-session Code Review`,chimeraDedicatedHint:`Automated code quality review that runs after every agent session. Catches regressions, anti-patterns, and potential bugs.`,chimeraSectionEnabled:`Post-session review (Chimera)`,chimeraSectionEnabledHint:`Run a code review agent after every iteration.`,chimeraProviderLabel:`Chimera provider`,chimeraProviderHint:`Provider for the review agent. Select one from your configured providers.`,chimeraProviderSessionDefault:`Session default`,chimeraModelLabel:`Model`,chimeraModelSessionDefault:`Session default`,chimeraModelHint:`Model for the review agent. Requires a provider first.`,chimeraMaxFilesLabel:`Max files per review`,chimeraMaxFilesHint:`Maximum number of changed files included in a single review call.`,chimeraAutoFixLabel:`Auto-fix mode`,chimeraAutoFixHint:`Whether the review agent should automatically apply fixes for issues it finds.`,chimeraAutoFixOff:`Off — review only`,chimeraAutoFixAsk:`Ask — confirm before applying`,chimeraAutoFixAuto:`Auto — apply without confirmation`,autoReviewCascadeOnLabel:`Cascade on`,autoReviewCascadeOnHint:`When a review finds issues at or above this severity, spawn follow-up agents.`,autoReviewCascadeOnOff:`Off`,autoReviewCascadeOnHigh:`High or above`,autoReviewCascadeOnCritical:`Critical only`,chimeraPickModel:`Pick provider/model for Chimera`,chimeraPickModelHint:`Select a provider and model for post-session code review.`,autoReviewSectionEnabled:`Mid-session review (Auto-Review)`,autoReviewSectionEnabledHint:`Run a review agent mid-session on every file change.`,autoReviewFallbackProfileLabel:`Fallback / Round-robin profile`,autoReviewFallbackProfileHint:`Named model profile for auto-review. It supplies the fallback pool and the models used by round-robin or random selection.`,autoReviewFallbackProfileNone:`None — use provider+model or session defaults`,autoReviewModelSelectionLabel:`Profile selection`,autoReviewModelSelectionHint:`Choose the next profile model in order, or pick a random starting model for each review.`,autoReviewModelSelectionRoundRobin:`Round-robin — iterate in profile order`,autoReviewModelSelectionRandom:`Random — pick from the profile`,autoReviewFallbackModelsLabel:`Fallback / Round-robin models`,autoReviewFallbackModelsEmpty:`No fallback / round-robin models configured`,autoReviewFallbackModelsHint:`Models resolved from the selected profile or global chain; they form both the selection pool and the retry chain.`,autoReviewModelLabel:`Model`,autoReviewModelHint:`Model for the auto-review agent. Requires a provider first.`,autoReviewDebounceLabel:`Debounce interval (ms)`,autoReviewDebounceHint:`Minimum gap between review triggers after a file change.`,autoReviewMaxFilesLabel:`Max files per batch`,autoReviewMaxFilesHint:`Files per auto-review call.`,autoReviewMaxConcurrentLabel:`Max concurrent reviews`,autoReviewMaxConcurrentHint:`Parallel review subagent cap.`,autoReviewCascadeLabel:`Cascade on`,autoReviewCascadeHint:`Follow-up agent threshold — spawns security-scanner and bug-hunter above this severity.`,autoReviewCascadeOff:`Off — no cascade`,autoReviewCascadeCritical:`Critical — only critical findings`,autoReviewCascadeHigh:`High — critical or high findings`,autoReviewPickModel:`Pick provider/model for Auto-Review`,autoReviewPickModelHint:`Select a provider and model, or a named fallback profile, for mid-session auto-review.`,pluginsPerPluginHint:`Enable or disable individual plugins. Changes take effect on next session.`},m={heading:`Fallback / Round-robin Models`,body:`These ordered model chains support failover and profile-based round-robin selection. On rate limits, 5xx errors, or stalls, the agent retries on the next available model.`,autoFallbackLabel:`Auto fallback`,autoFallbackHint:`When the chain above is empty, auto-derive one from your keyed providers.`,favoritesOnlyLabel:`Favorites only`,favoritesOnlyHint:`When auto fallback derives a chain, restrict it to your favorite models.`,profilesHeading:`Fallback / Round-robin Profiles`,addProfile:`Add`,noProfiles:`No named fallback profiles yet.`,createDefault:`Create default from active model`,useChain:`Use chain`,setLeader:`Set leader`,profileEmpty:`Profile is empty.`,favoritesHeading:`Favorite Models`,favoritesEmpty:`Favorites are shown first and can constrain auto fallback.`,addModelToProfile:`Add model to profile…`,addFavoriteModel:`Add favorite model…`,inactive:`inactive`},h={heading:`Fleet & Streaming`,fleetChatVerbosityLabel:`Stream fleet events`,fleetChatVerbosityHint:`Show live subagent activity in the fleet panel.`,maxConcurrentLabel:`Max concurrent subagents`,maxConcurrentHint:`Maximum number of subagents that can run simultaneously.`,nextPredictionLabel:`Next-step prediction`,nextPredictionHint:`After a turn completes, predict likely next steps.`,nextStepsToolLabel:`Nextsteps tool`,nextStepsToolHint:`Let the agent record its follow-up suggestions with a tool call instead of writing the block by hand. Applies to the next session.`},g={heading:`Integrations`,hqHeading:`HQ Client`,hqPublishingLabel:`HQ publishing`,hqPublishingHint:`Publish this WebUI/client session to WrongStack HQ.`,hqUrlLabel:`HQ URL`,hqUrlHint:`Leave empty for same-machine auto-discovery.`,hqTokenLabel:`HQ client token`,hqRawContentLabel:`Raw HQ content`,hqRawContentHint:`Send raw content previews to HQ instead of redacted previews.`,wrongProxyHeading:`WrongProxy / WrongTrace`,wrongProxyEnabledLabel:`Route base URLs through the local proxy`,wrongProxyEnabledHint:`When enabled, every provider's base URL is rewritten through the configured proxy (default http://localhost:3444/proxy/<host><path>). openai-codex is excluded — it talks directly to the ChatGPT backend with an OAuth-issued token.`,wrongProxyUrlLabel:`Proxy URL`,wrongProxyUrlHint:`Where the local proxy daemon listens. The system periodically probes <url>/api/health; an unreachable daemon disables rewriting without retrying every keystroke.`,wrongProxyChangesApply:`Changes apply immediately to subsequent requests — no restart needed.`,telegramHeading:`Telegram Notifications`,telegramSessionEndLabel:`Session end`,telegramSessionEndHint:`Send a summary when a session ends.`,telegramDelegateLabel:`Delegate finished`,telegramDelegateHint:`Send a humanized note when a subagent completes.`,telegramLongToolLabel:`Long-running tools`,telegramLongToolHint:`Notify when a tool exceeds {{ms}}ms. Set 0 to disable.`,telegramChangesApply:`Changes apply immediately.`,telegramNotConfigured:`Telegram is not configured.`,disabledHint:`Enable the feature in the Context tab to use this section.`},_={heading:`Context & Memory`,flagsHeading:`Feature Flags`,memoryLabel:`Memory`,memoryHint:`Persist and recall facts across sessions.`,skillsLabel:`Skills`,skillsHint:`Load domain-specific skill prompts.`,indexOnStartLabel:`Index on start`,indexOnStartHint:`Build the codebase symbol index at session start.`,mcpLabel:`MCP servers`,mcpHint:`Enable Model Context Protocol integrations.`,pluginsLabel:`Plugins`,pluginsHint:`Load and run user-installed plugins.`,modelsRegistryLabel:`Models registry`,modelsRegistryHint:`Use the models.dev catalog for provider discovery.`,autoCompactLabel:`Auto-compact context`,autoCompactHint:`Automatically trim the context window when near limits.`,compactorStrategyLabel:`Compactor strategy`,compactorStrategyHint:`How the context is compacted when it grows too large.`,compactorStrategyHybrid:`Hybrid — fast rules (default)`,compactorStrategyIntelligent:`Intelligent — LLM summarization`,compactorStrategySelective:`Selective — LLM-driven selection`,contextModeLabel:`Context mode`,contextModeHint:`Context window policy — balanced is the default.`,contextModeBalanced:`Balanced — normal context usage`,contextModeFrugal:`Frugal — conservative token use`,contextModeDeep:`Deep — larger context for complex tasks`,tokenSavingLabel:`Token-saving mode`,tokenSavingHint:`Controls the next session's direct tool schemas and system prompt size.`,tokenSavingAuto:`Auto — adapt prompt to the model window`,tokenSavingOff:`Off — no token saving`,tokenSavingMinimal:`Minimal — basic optimization`,tokenSavingLight:`Light — moderate reduction`,tokenSavingMedium:`Medium — significant savings`,tokenSavingAggressive:`Aggressive — smallest direct surface and prompt`,pluginsPerPluginHeading:`🔌 Per-Plugin Controls`,pluginsPerPluginHint:`Enable or disable individual plugins. Changes take effect on next session.`,pluginChimera:`Chimera — post-session code review`,pluginSkills:`Skills — skill library & authoring`,pluginPrompts:`Prompts — prompt library & gen`,pluginCostTracker:`Cost Tracker — token & cost tracking`,pluginTelegram:`Telegram — notification bot`,pluginKnowledgeGraph:`Knowledge Graph — persistent facts`,pluginErrorLens:`Error Lens — failure diagnostics`,pluginTodoTracker:`Todo Tracker — persistent todos`,pluginSecretScanner:`Secret Scanner — credential detection`,pluginLintGate:`Lint Gate — lint before iteration`,pluginDiffSummary:`Diff Summary — compact diffs`,pluginDepGuard:`Dep Guard — dependency rules`,pluginTypeGate:`Type Gate — typecheck before iteration`,pluginInjectionShield:`Injection Shield — prompt injection`,pluginPromptFirewall:`Prompt Firewall — input filtering`,pluginTokenBudget:`Token Budget — token limits`,pluginLoopBreaker:`Loop Breaker — runaway detection`},v={heading:`Logs & Debug`,logLevelLabel:`Log level`,logLevelHint:`Minimum severity for server-side logging.`,logLevelDebug:`Debug — everything`,logLevelInfo:`Info — normal flow`,logLevelWarn:`Warn — problems only`,logLevelError:`Error — failures only`,auditLevelLabel:`Audit level`,auditLevelHint:`Detail level for session audit logs.`,auditLevelMinimal:`Minimal — errors only`,auditLevelStandard:`Standard — tool calls + errors`,auditLevelFull:`Full — every event (large logs)`,fsAccessLabel:`Filesystem access`,fsAccessHint:`Scope of the file tools. Applies on the next session.`,fsAccessUnrestricted:`Unrestricted — any path`,fsAccessProject:`Project — confined to project root`,debugStreamLabel:`Debug stream`,debugStreamHint:`Raw SSE hex-dump to the server stderr for provider debugging.`},y={heading:`Security & Monitoring`,brainHeading:`🧠 Brain — Decision Control`,brainHint:`Decision models, council, escalation and risk ceiling — applied live, saved to the global config.`,shadowHeading:`👁 Shadow Agent — Fleet Monitor`,shadowHint:`The Shadow Agent monitors all fleet agents, tracks their tasks, and detects anomalies.`,toolsHeading:`🔧 Tool Access Control`,toolsHint:`Enable or disable individual tools. Mutating tools are marked in amber.`,breakerHeading:`Process Circuit Breaker`,breakerHint:`Gate bash/exec after repeated failures; trips arm the kill/reset countdown.`},b={switchingTo:`Switching to {{provider}} / {{model}}…`,switching:`Switching model…`,switchingToTarget:`Switching to {{target}}…`,previousModel:`previous model`,modelSwitchedNextRequest:`Model switched: {{from}} → {{to}}. Active for the next LLM request.`,modelSwitchedRunActive:`Model switched: {{from}} → {{to}}. Active for the next LLM request; the current run continues and is not restarted.`,fallbackExists:`Fallback profile "{{name}}" already exists`,selectProviderModelFirst:`Select a provider and model first`,defaultProfileCreated:`Default fallback profile created`,profileEmpty:`Fallback profile "{{name}}" is empty`,leaderSetFrom:`Leader set from {{name}}`,modelSwitchTimeout:`Model switch timed out. Please try again.`},x={workbenchHeading:`Workbench chrome`,workbenchHint:`Toggle visibility of workbench surfaces in the chat view.`,showModelReasoningLabel:`Show model reasoning`,showModelReasoningHint:`Render LLM reasoning/thinking blocks in chat history (TUI parity).`,showAgentSwarmPanelLabel:`Agent swarm panel`,showAgentSwarmPanelHint:`Controls where the agent swarm (fleet + mission queue) is displayed.`,swarmPanelBottom:`Bottom panel`,swarmPanelSidebar:`Right sidebar`,swarmPanelOff:`Off`,titleAnimationLabel:`Title animation`,titleAnimationHint:`Animate the terminal/tab title with run-state status (TUI parity).`,keyboardShortcutsLabel:`Keyboard shortcuts`,keyboardShortcutsHint:`Enable global keyboard shortcuts (Ctrl+K, Alt+1..4, Vim keys, etc.). Off by default.`,statusChipHeading:`Status chip & statusline`,statusChipHint:`Visual style for the TUI/CLI statusline and working-state chip.`,thinkingWordLabel:`Thinking word`,thinkingWordHint:`Single short word shown in the TUI status chip while the agent is working.`,statuslineModeLabel:`Statusline mode`,statuslineModeHint:`Density of the TUI statusline rail.`,statuslineModeMinimum:`Minimum`,statuslineModeDetailed:`Detailed`,statuslineModeNoColor:`No color`,animationStyleLabel:`Animation style`,animationStyleHint:`Animation for the TUI working-state chip.`,animationStyleRainbow:`Rainbow`,animationStyleWave:`Wave`,animationStylePulse:`Pulse`,animationStyleDots:`Dots`,animationStyleBreathe:`Breathe`,animationStyleStatic:`Static`,animationStyleCycle:`Cycle`,refineHeading:`Refine countdown & diffs`,refineHint:`Configure the pre-refine grace countdown and the multi-diff summary footer cutoff.`,preRefineSecondsLabel:`Pre-refine countdown`,preRefineSecondsHint:`Grace period before the refiner starts (seconds). 0 = skip the countdown and refine immediately.`,preRefineSecondsPresets:`Presets: {{presets}} seconds (0 = off).`,multiDiffSummaryLabel:`Multi-diff summary`,multiDiffSummaryHint:`Minimum number of files before the aggregate 'N files · +X -Y' footer is shown above per-file blocks.`,multiDiffSummaryPresets:`Presets: {{presets}} (0 = off).`,memoryHeading:`Read tool & SAGE memory injection`,memoryHint:`Toggle what the read tool includes and when SAGE memory blocks are surfaced in tool results.`,readSymbolsLabel:`Read symbols`,readSymbolsHint:`When true, the read tool includes codebase-index symbols alongside file content.`,showSageMemoryInjectLabel:`Show SAGE Memory Inject`,showSageMemoryInjectHint:`When true, surface SAGE memory-injection blocks in tool results.`,sageMemoryInjectThresholdLabel:`SAGE Memory Inject threshold`,sageMemoryInjectThresholdHint:`Minimum relation strength required for an injected SAGE memory (0.72–0.95).`,footnote:`Settings here mirror the TUI /settings picker. Toggles apply live; some fields require a session restart.`,sageRelaxed:`0.72 (relaxed)`,sageDefault:`0.85 (default)`,sageStrict:`0.95 (strict)`},S=`Reset`,C=`Cancel`,w=`Reset all preferences?`,T=`This restores default settings and reloads the page.`,E=`Reset`,D={heading:`Brain`,headingHint:`Decision models, council, escalation and risk ceiling — applied live, saved to the global config.`,riskHeading:`Autonomy ceiling`,escalationHeading:`Escalation`,escalationModeLabel:`Mode`,escalationModeHint:`Headless: the Brain never blocks on a human — unanswered escalations resolve via the safe terminal policy. Applies to CLI/TUI sessions; the standalone WebUI Brain is always headless.`,escalationDecisionTimeoutLabel:`Decision timeout`,escalationDecisionTimeoutHint:`Per-LLM-call time budget for one Brain decision.`,escalationHumanTimeoutLabel:`Human answer timeout`,escalationHumanTimeoutHint:`Interactive mode: how long an escalation prompt may wait before the terminal policy resolves it.`,escalationTerminalPolicyLabel:`Terminal policy`,escalationTerminalPolicyHint:`How a headless escalation resolves with no human available. Conservative accepts a recommended option at low/medium risk; deny-all never auto-accepts; continue-on-recommended accepts a recommended option at ANY risk.`,escalationDecisionLogSizeLabel:`Decision log size`,escalationDecisionLogSizeHint:`Rolling in-memory decision log kept for the status view.`,rulesHeading:`Deterministic rules`,rulesConfigured:`{{count}} configured`,rulesBody:`Evaluated before any provider call — first match wins. Edit them in the global config file; this view is read-only.`,rulesOff:`off`,rulesDropped:`{{count}} rule(s) dropped`,heuristicsHeading:`Heuristics`,heuristicsBody:`Free pattern guesses that settle a question before any model runs. All on by default — turn one off when its guess is wrong for your workload.`,heuristicsLowRiskLabel:`Low-risk auto-answer`,heuristicsLowRiskHint:`Auto-answer low-risk requests that already carry a recommended option.`,heuristicsBlockedLabel:`Blocked-resolved`,heuristicsBlockedHint:`'blocked …' plus an explicit resolution marker in the context resolves to continue.`,heuristicsDeadlockLabel:`Deadlock skip`,heuristicsDeadlockHint:`'deadlock' plus failed work units in the context resolves to skip and continue.`,heuristicsRetryLabel:`Retry exhausted`,heuristicsRetryHint:`'failed'/'retry' plus demonstrably exhausted retries marks the unit failed and moves on.`,heuristicsPingLabel:`Continue ping`,heuristicsPingHint:`A bare continue/proceed ping with no competing alternative resolves to continue.`,heuristicsMarkers:`Markers: {{markers}}`,qualityHeading:`LLM quality`,qualityCircuit_one:`circuit {{state}} · {{count}} fail`,qualityCircuit_other:`circuit {{state}} · {{count}} fails`,qualityResponseBudgetLabel:`Response budget`,qualityResponseBudgetHint:`Output tokens per decision call. A Brain response is one decision plus a one-sentence rationale.`,qualityRejectLabel:`Reject uncertain answers`,qualityRejectHint:`Treat a declined or empty response as 'this tier could not decide' instead of accepting it as an answer.`,qualityMinConfidenceLabel:`Minimum confidence`,qualityMinConfidenceHint:`Reject answers whose self-reported confidence is below this. Responses reporting no confidence always pass.`,qualityDenyTerminalLabel:`Deny is terminal`,qualityDenyTerminalHint:`Whether a deny from the single-LLM tier ends the decision. 'when-decided' makes a genuine refusal terminal while infrastructure failures still escalate.`,traceHeading:`Replay trace`,traceRecordLabel:`Record decision traces`,traceRecordHint:`Per-decision JSONL of every tier, pool target and council vote, with timings and token usage. Off by default — enabling it writes decision content to disk.`,traceContentLabel:`Trace content`,traceContentHint:`'full' keeps question and context (needed to replay a decision); 'redacted' truncates free text; 'none' records metadata only.`,cacheHeading:`Decision cache`,cacheStats:`{{hits}} hit / {{misses}} miss · {{size}} live`,cacheReplayLabel:`Replay identical verdicts`,cacheReplayHint:`Reuse a previous council/LLM verdict for an identical repeated question. Deterministic tiers and ask-human are never cached; a decision the ledger observes to have failed is evicted.`,cacheLifetimeLabel:`Entry lifetime`,cacheLifetimeHint:`How long a cached verdict stays replayable.`,cacheMaxEntriesLabel:`Maximum entries`,cacheMaxEntriesHint:`Cap on live cached verdicts.`,monitorHeading:`Monitor`,monitorBody:`Distress-signal self-activation. The monitor is built once at boot, so these apply to the next session rather than live.`,monitorWatchLabel:`Watch for distress signals`,monitorWatchHint:`Tool-failure streaks, error storms, agent stalls and file churn engage the Brain on their own.`,monitorPolicyLabel:`Signal policy`,monitorPolicyHint:`How a detected signal resolves. 'llm' consults the Brain; 'steer' always intervenes and 'observe' never does — both without a provider call.`,modelsHeading:`Decision models`,modelsSessionBadge:`session model`,modelsResolvedBadge:`{{resolved}}/{{total}} resolved`,modelsUseSessionLabel:`Use session model`,modelsUseSessionHint:`Decide with whatever model the session is running. Turn off by adding models below.`,modelsAddModel:`Add model`,modelsPoolStrategyLabel:`Pool strategy`,modelsPoolStrategyHint:`Fallback: first model is primary, the rest are tried in order on failure. Round-robin: decisions rotate across the pool.`,councilHeading:`Council`,councilConvened:`convened`,councilDisabled:`disabled`,councilEnableLabel:`Enable multi-LLM council`,councilEnableHint:`High-stakes questions are voted on by independent seats (executor / skeptic-with-veto / auditor) instead of one model. Needs ≥2 resolvable voters (explicit seats below, or a ≥2-model pool).`,councilSeatsDerived:`Seats derived from the pool: {{seats}}`,councilCustomLens:`Custom decision lens — sent to the seat verbatim.`,councilCustomOption:`{{persona}} (custom)`,councilVeto:`veto`,councilAddVoter:`Add voter`,councilRiskFloorLabel:`Risk floor`,councilRiskFloorHint:`Minimum question risk that convenes the council instead of the single-model tier.`,councilJudge:`Judge`,councilJudgeDesc:`Tie-breaker model that sees every vote's rationale.`,councilResolved:`resolved: {{model}}`,councilAlsoVoter:`⚠ also a voter`,councilAuto:`auto`,councilPick:`Pick…`,councilAutoReset:`Auto`,councilQuorumLabel:`Quorum`,councilQuorumHint:`Fraction of seats that must return a valid vote.`,councilApprovalLabel:`Approval`,councilApprovalHint:`Fraction of cast vote weight the winning option must exceed.`,councilPerSeatTimeoutLabel:`Per-seat timeout`,councilPerSeatTimeoutHint:`Time budget for a single seat's vote. Slower than the decision timeout means one stalled seat holds up the vote.`,councilMaxConcurrencyLabel:`Max concurrency`,councilMaxConcurrencyHint:`How many seats vote in parallel. Lower this when the pool shares one rate-limited provider.`,councilDistinctnessLabel:`Seat distinctness`,councilDistinctnessHint:`Reject duplicate seats: 'model' requires distinct models, 'provider' requires independent providers so one outage cannot sway the vote.`,councilVoterBudgetLabel:`Voter response budget`,councilVoterBudgetHint:`Output tokens per seat call — reasoning models spend thinking tokens from this budget.`,councilRoundsLabel:`Deliberation rounds`,councilRoundsHint:`Round 1 is independent. Later rounds show each seat the others’ ballots so it can revise. Only the last round is tallied — and every round costs one more call per seat.`,councilJudgeBudgetLabel:`Judge response budget`,councilJudgeBudgetHint:`Output tokens for the tie-breaking judge call.`,councilSeatTemplate:`Seat template:`,ledgerHeading:`Decision ledger`,ledgerRecordLabel:`Record decisions + outcomes`,ledgerRecordHint:`Persists every decision and its observed outcome; similar past outcomes are fed back into future Brain prompts.`,ledgerAutoDenyLabel:`Auto-deny after failures`,ledgerAutoDenyHint:`Deny deterministically (no LLM) once this many consecutive approvals of a decision group ended in observed failures.`,ledgerMemoryEntriesLabel:`In-memory entries`,ledgerMemoryEntriesHint:`Ring size held in memory, and the number of past entries seeded from disk at boot.`,ledgerRetryWindowLabel:`Intervention retry window`,ledgerRetryWindowHint:`A same-kind monitor intervention re-firing inside this window marks the previous steer as a failure.`,recentHeading:`Recent decisions ({{count}})`,recentEmpty:`No decisions recorded yet this session.`,optInteractive:`Interactive (ask me)`,optHeadless:`Headless (never ask)`,optConservative:`Conservative (default)`,optDenyAll:`Deny all`,optContinueRecommended:`Continue on recommended`,optNeverDefault:`Never (default)`,optWhenDecided:`When decided`,optAlways:`Always`,optFullDefault:`Full (default)`,optRedacted:`Redacted`,optMetadataOnly:`Metadata only`,optConsultBrain:`Consult the Brain (default)`,optAlwaysSteer:`Always steer`,optObserveOnly:`Observe only`,optFallback:`Fallback`,optRoundRobin:`Round-robin`,optMediumPlus:`Medium+`,optHighPlus:`High+`,optCriticalOnly:`Critical only`,optNoneDefault:`None (default)`,optDistinctModels:`Distinct models`,optDistinctProviders:`Distinct providers`,optDefault3:`Default (3)`,optOff:`Off`,pickPoolTitle:`Add Brain pool model`,pickPoolHint:`Ordered decision pool — first is primary.`,pickVoterTitle:`Add council voter`,pickVoterHint:`Dialog stays open — add ≥2 voters, then close.`,pickJudgeTitle:`Pick council judge`,pickJudgeHint:`Tie-breaker that sees every vote.`,persistError:`Settings applied live but not saved.`,riskCopy:{off:`Human decides everything`,low:`Auto-decide low risk only`,medium:`Auto-decide up to medium risk`,high:`Auto-decide up to high risk`,all:`Auto-decide everything`},rulesConfigured_one:`{{count}} configured`,rulesConfigured_other:`{{count}} configured`},O={default15s:`Default (15s)`,waitForever:`Wait forever`,defaultHalf:`Default (0.5)`,all:`All`,n200Default:`200 (default)`,offDefault:`Off (default)`,n20Default:`20 (default)`,m5Default:`5m (default)`,default:`Default`,oneSerial:`1 (serial)`,roundsOff:`1 (no deliberation)`,default500:`Default (500)`,default10m:`Default (10m)`},k={capToolCall:`Tool call`,capReasoning:`Reasoning`,capTemperature:`Temperature`,capAttachment:`Attachment`,capStructuredOutput:`Structured output`,capOpenWeights:`Open weights`},A={presetsHeading:`Font presets`,presetsHint:`A preset sets every role at once; fonts download only when first used.`,presets:{workbench:{label:`Workbench`,description:`The default operator-workbench look.`},plex:{label:`IBM Plex`,description:`One engineered family end to end.`},modern:{label:`Modern`,description:`Neutral Inter with JetBrains Mono for code.`},geist:{label:`Geist`,description:`A crisp Geist sans and mono pairing.`},classic:{label:`Classic`,description:`Adobe's Source Sans, Serif, and Code Pro.`},editorial:{label:`Editorial`,description:`Serif headings and a bookish chat font.`},readable:{label:`Readable`,description:`High-legibility faces for long sessions.`},friendly:{label:`Friendly`,description:`Rounded, relaxed shapes with Fira Code.`},monospace:{label:`Monospace`,description:`Monospace everywhere, terminal style.`},system:{label:`System`,description:`Your OS fonts, nothing downloaded.`}},rolesHeading:`Fonts by role`,rolesHint:`Override any role on top of the preset. Roles marked “Same as” follow their parent role.`,roles:{ui:{label:`Interface & panels`,hint:`Buttons, menus, sidebars, lists, and settings.`},display:{label:`Headings`,hint:`Page and section titles.`},reading:{label:`Chat & documents`,hint:`Assistant replies, markdown, and mailbox messages.`},code:{label:`Inline code & data`,hint:`Code blocks, logs, IDs, and tabular readouts.`},editor:{label:`Code editor`,hint:`Monaco file editor and diff view.`},terminal:{label:`Terminal`,hint:`Integrated terminal sessions.`}},fromPreset:`Preset ({{name}})`,inherit:`Same as {{role}} ({{name}})`,categories:{sans:`Sans serif`,serif:`Serif`,mono:`Monospace`},systemTag:`system`,sizeHeading:`Size & spacing`,sizeHint:`Interface text size scales every panel; editor and terminal sizes are set in pixels.`,sizePresets:{compact:`Compact`,normal:`Normal`,comfortable:`Comfortable`,large:`Large`,custom:`Custom`},controls:{uiScale:{label:`Interface text size`,hint:`Scales text across panels, chat, and dialogs.`},editorFontSize:{label:`Editor font size`,hint:`Monaco editor and diff view.`},codeLineHeight:{label:`Code line height`,hint:`Editor, diff view, and code blocks.`},terminalFontSize:{label:`Terminal font size`,hint:`Integrated terminal.`},terminalLineHeight:{label:`Terminal line height`,hint:`Row spacing in the terminal.`},ligatures:{label:`Code ligatures`,hint:`Joins => !== >= into single glyphs in fonts that support it (Fira Code, Cascadia, JetBrains Mono…). Not applied in the terminal.`}},previewHeading:`Live preview`,preview:{heading:`Refactor the session loader`,body:`The agent read 12 files and proposed a two-step change. Review the diff before applying it.`,label:`Interface label`},resetAll:`Reset all font settings`,resetOverrides:`Clear role overrides`},j={title:e,subtitle:t,tabs:n,general:r,model:i,connection:a,provider:o,providerModels:s,mcp:c,allowlist:l,oauth:u,agent:d,execution:f,features:p,fallbacks:m,fleet:h,integrations:g,context:_,logs:v,security:y,toast:b,display:x,resetLabel:S,cancel:C,resetConfirmTitle:w,resetConfirmBody:T,resetConfirmAction:E,brain:D,brainOpt:O,modelSchema:k,fonts:A};export{d as agent,l as allowlist,D as brain,O as brainOpt,C as cancel,a as connection,_ as context,j as default,x as display,f as execution,m as fallbacks,p as features,h as fleet,A as fonts,r as general,g as integrations,v as logs,c as mcp,i as model,k as modelSchema,u as oauth,o as provider,s as providerModels,E as resetConfirmAction,T as resetConfirmBody,w as resetConfirmTitle,S as resetLabel,y as security,t as subtitle,n as tabs,e as title,b as toast};
@@ -1 +0,0 @@
1
- var e=`Configurações`,t=`Configure every aspect of your agent workspace`,n={general:`Geral`,provider:`Provedor`,connection:`Conexões`,agent:`Agente`,execution:`Execução`,fallbacks:`Fallbacks`,routing:`Roteamento`,fleet:`Frota`,integrations:`Integrações`,chimera:`Chimera`,context:`Contexto`,logs:`Registros`,security:`Segurança`,display:`Exibição`,displayDesc:`Aparência do workbench, chip de status, temporizadores de refine e alternâncias de injeção de ferramenta/memória — reflete o SettingsPicker do TUI.`,generalDesc:`Aparência, idioma e preferências de exibição — espelha o seletor de configurações da TUI.`,providerDesc:`Chaves de API, provedores salvos e o catálogo de provedores.`,connectionDesc:`URL do servidor WebSocket e saúde da conexão.`,agentDesc:`Autonomia, refinamento de prompts, raciocínio e roteamento de modelos.`,executionDesc:`Limites de iterações, comportamento de saída e disjuntor de processo.`,fallbacksDesc:`Cadeia de fallback de modelos, favoritos e perfis de fallback nomeados.`,routingDesc:`Matriz de roteamento de modelos por fase e por função.`,fleetDesc:`Concorrência de subagentes, streaming e previsão do próximo passo.`,integrationsDesc:`Cliente HQ, servidores MCP e notificações do Telegram.`,chimeraDesc:`Configuração do agente de revisão de código pós-sessão.`,contextDesc:`Flags de recursos, estratégia de contexto, compactador e controles de plugins.`,logsDesc:`Nível de log, detalhe de auditoria, escopo de acesso ao sistema de arquivos e stream de depuração.`,securityDesc:`Controle de decisão Brain, agente sombra e acesso a ferramentas.`,fonts:`Fontes`,fontsDesc:`Fontes de interface, chat, editor e terminal; tamanho, altura de linha e ligaduras.`},r={heading:`Modelo`,loading:`Carregando modelos...`,notFound:`Nenhum modelo encontrado para este provedor. O catálogo pode estar vazio ou ainda carregando.`,selectProviderFirst:`Selecione um provedor primeiro`,context:`{{count}}k contexto`},i={providerHealth:{heading:`Saúde dos provedores`,hint:`Quais pares de provedor/modelo estão saudáveis, degradados ou bloqueados e por quê.`,refresh:`Atualizar`,empty:`Nenhum provedor monitorado ainda.`,summary:`{{blocked}} bloqueados · {{degraded}} degradados · {{healthy}} saudáveis`,totalFailures:`falhas`,rateLimits:`limites de taxa`,state:{blocked:`Bloqueado`,degraded:`Degradado`,healthy:`Saudável`},blocked:`Bloqueado`,degraded:`Degradado`,consecutive:`falhas consecutivas`,retryNow:`Tentar novamente`,clear:`Limpar`,allHealthy:`Todos os provedores monitorados estão saudáveis.`,statSuccesses:`sucessos`,statFailures:`falhas`,statRateLimits:`limites de taxa`,statConsecutive:`consecutivas`,lastError:`Último erro`,recentErrors:`Erros recentes`,autoRecovery:`Recuperação automática às`,expired:`Expirado`,remainingSecs:`{{secs}} s`,remainingMins:`{{mins}} min`,remainingHours:`{{hours}} h {{mins}} min`,explainHealthy:`Respondendo normalmente.`,explain402:`Limite de cobrança atingido (402). Bloqueado por cerca de 15 minutos até a redefinição da cota.`,explain403quota:`Limite de uso deste ciclo atingido. Bloqueado até a próxima redefinição (cerca de 15 min).`,explain403auth:`Erro de permissão/autenticação. Não é possível repetir — verifique a chave de API e os direitos de acesso.`,explain429:`Limite de taxa atingido (429). Restrição temporária com recuperação automática.`,explain529:`Servidor sobrecarregado (529). O provedor está sob carga intensa.`,explain5xx:`Erro do servidor ({{status}}). Problema temporário no backend.`,explainNetwork:`Rede inacessível. Verifique sua conexão ou a página de status do provedor.`,explainTimeout:`Tempo limite da solicitação excedido (408). O provedor demorou para responder.`,explainStreamHang:`Fluxo interrompido (599). O provedor parou durante a resposta.`,explainQuota:`Cota esgotada. Bloqueado até a janela de redefinição.`,explainUnknown:`Tipo de falha: {{kind}} / status: {{status}}.`},wsUrlLabel:`URL do servidor WebSocket`,wsUrlPlaceholder:`ws://localhost:3456`,wsUrlHint:`URL do servidor WebSocket do agente. O servidor é executado junto com o CLI.`,startingHeading:`Iniciando o servidor WebSocket`,startingBody:`Para desenvolvimento, execute ./dev.ps1 da raiz do repo (opcionalmente defina WS_HOST/WS_PORT antes). Caso contrário, inicie a WebUI com a CLI: wstack --webui.`,healthHeading:`Saúde das conexões`,healthHint:`Relatório ao vivo de propriedade, armazenamento, fila, observador e latência dos serviços.`,healthRefresh:`Atualizar`,healthLoading:`Verificando serviços…`,healthUnknown:`Saúde desconhecida`,healthDisconnected:`O WebSocket da WebUI está desconectado.`,healthRestartRequired:`Reinicie o backend uma vez para ativar o relatório de conexões.`,healthOptional:`Sob demanda`,endpointInvalidBadge:`caminho do socket muito longo`,endpointInvalidRemedy:`O caminho do socket IPC excede o limite de comprimento desta plataforma, então o daemon compartilhado não pode iniciar. As consultas recorrem a um modo local de processo mais lento. Remédio: defina um TMPDIR mais curto (ex. export TMPDIR=/tmp) e reinicie o WrongStack.`,healthCounts:`{{healthy}} saudáveis · {{attention}} atenção · {{sleeping}} inativos`,healthOverall:{healthy:`Serviços obrigatórios saudáveis`,degraded:`Serviço obrigatório degradado`,error:`Serviço obrigatório indisponível`},healthStatus:{healthy:`Saudável`,degraded:`Degradado`,offline:`Inativo`,unavailable:`Indisponível`,error:`Erro`},services:{kanban:{label:`Kanban IPC`},mailbox:{label:`Mailbox IPC`}},serviceActionRestart:`Reiniciar {{label}}`,webuiTransport:`Transporte do WebUI`,serviceAutoRestarting:`Reiniciando automaticamente…`},a={savedProviderCount_one:`{{count}} provedor`,savedProviderCount_other:`{{count}} provedores`,keyCount_one:`{{count}} chave configurada`,keyCount_other:`{{count}} chaves configuradas`,activeKeyCount_one:`{{count}} chave ativa`,activeKeyCount_other:`{{count}} chaves ativas`,subscriptionHeading:`Login com assinatura`,apiKeysHeading:`Provedores de chave de API`,apiKeysBody:`Escolha um provedor do catálogo e adicione uma chave de API, ou gerencie os provedores salvos.`,tabCatalog:`Catálogo`,tabSaved:`Salvos ({{count}})`,searchPlaceholder:`Pesquisar entre {{count}} provedores (nome / id / família)…`,loadingCatalog:`Carregando catálogo...`,noMatch:`Nenhum provedor corresponde a "{{query}}".`,configured:`Configurado`,reachable:`Acessível`,envVar:`ENV: {{var}}`,modelCount_one:`{{count}} modelo`,modelCount_other:`{{count}} modelos`,keyPlaceholder:`Chave de API do {{name}}`,orEnv:`Ou defina {{env}} no ambiente.`,addApiKey:`Adicionar chave de API`,manageKeys:`Gerencie suas chaves de API e configurações de provedor`,addProvider:`Adicionar provedor`,addCustomHeading:`Adicionar provedor personalizado`,localServers:`Servidores locais — clique para preencher:`,providerIdPlaceholder:`ID do provedor (ex. my-llm-server)`,apiKeyOptionalPlaceholder:`Chave de API (opcional)`,noSaved:`Nenhum provedor salvo`,noSavedHint:`Adicione um provedor para começar`,apiKeysLabel:`Chaves de API`,addKey:`Adicionar chave`,noKeys:`Nenhuma chave configurada`,active:`Ativa`,setActive:`Definir como ativa`,keyLabelPlaceholder:`Rótulo da chave (ex. default, production)`,apiKeyPlaceholder:`Chave de API`,saveKey:`Salvar chave`,savedToast:`Chave salva para {{name}}`},o={addCustom:`Adicionar modelo personalizado`,addCustomTitle:`Adicionar modelo personalizado`,addFromCatalog:`Adicionar do catálogo`,catalogSearchPlaceholder:`Pesquisar no catálogo models.dev…`,catalogSearchTitle:`Pesquisar no catálogo models.dev`,colActions:`Ações`,colCaps:`Capacidades`,colContext:`Contexto`,colCost:`Custo`,colModalities:`Modalidades`,colModel:`Modelo`,colOutput:`Saída`,colSource:`Origem`,editModel:`Editar modelo`,emptyState:`Nenhum modelo ainda — adicione do catálogo ou crie um modelo personalizado.`,fieldContext:`Janela de contexto`,fieldCostInput:`Custo de entrada`,fieldCostOutput:`Custo de saída`,fieldDescription:`Descrição`,fieldFamily:`Família`,fieldInputLimit:`Limite de entrada`,fieldInputModalities:`Modalidades de entrada`,fieldLastUpdated:`Última atualização`,fieldName:`Nome`,fieldOutput:`Saída máxima`,fieldOutputModalities:`Modalidades de saída`,fieldReleaseDate:`Data de lançamento`,modelAdded:`{{model}} adicionado`,modelRemoved:`{{model}} removido`,modelSaved:`{{model}} salvo`,noResults:`Nenhum modelo encontrado`,removeModel:`Remover modelo`,sectionCapabilities:`Indicadores de capacidades`,sectionDates:`Datas`,sectionIdentity:`Identidade`,sectionLimits:`Limites`,sectionModalities:`Modalidades`,sectionPricing:`Preços (por 1M de tokens, USD)`,tabForm:`Formulário`,tabRawJson:`JSON bruto`,typeToSearch:`Digite para pesquisar…`,useModel:`Usar {{model}}`,usingModel:`Usando {{model}}`,filterPlaceholder:`Filtrar modelos…`},s={status:{connected:`Conectado`,connecting:`Conectando`,sleeping:`Inativo`,discovering:`Descobrindo`,error:`Erro`,stopped:`Parado`,unknown:`Desconhecido`},disabled:`Os servidores MCP estão desativados.`,wakeTitle:`Acordar servidor`,sleepTitle:`Colocar em repouso`,discoverTitle:`Descobrir ferramentas`,editTitle:`Editar`,removeTitle:`Remover`,statusLabel:`Status:`,enabledLabel:`Ativado:`,yes:`Sim`,no:`Não`,descriptionLabel:`Descrição:`,pidLabel:`PID:`,errorLabel:`Erro:`,toolsLabel:`Ferramentas ({{count}}):`,noTools:`Nenhuma ferramenta descoberta ainda`,serverNameRequired:`O nome do servidor é obrigatório`,dialogTitleEdit:`Editar servidor MCP`,dialogTitleAdd:`Adicionar servidor MCP`,dialogTitleAddCustom:`Adicionar servidor MCP personalizado`,fieldName:`Nome`,fieldNamePlaceholder:`ex. github, filesystem`,fieldTransport:`Transporte`,fieldUrl:`URL`,fieldCommand:`Comando`,fieldCommandPlaceholder:`ex. npx`,fieldArgs:`Args`,fieldArgsHint:`(separados por espaços)`,fieldArgsPlaceholder:`ex. -y @modelcontextprotocol/server-github`,fieldEnv:`Variáveis de ambiente`,fieldEnvHint:`(KEY=valor, uma por linha)`,fieldDescription:`Descrição`,fieldDescriptionPlaceholder:`Servidor MCP do GitHub para acesso ao repositório`,enableServer:`Ativar servidor`,lazyConnect:`Conexão preguiçosa`,lazyConnectHint:`(não inicia até a primeira chamada; hiberna quando ocioso)`,saveChanges:`Salvar alterações`,addServer:`Adicionar servidor`,requires:`Requer: {{vars}}`,added:`Adicionado`,heading:`Servidores MCP`,summary:`{{connected}} conectados · {{sleeping}} inativos · {{total}} no total`,addCustom:`Personalizado`,tabRecommended:`Recomendados`,tabServers:`Servidores`,tabAddCustom:`Personalizado`,recommendedBody:`Adição com um clique para servidores MCP populares. Clique em Adicionar para preencher a configuração e depois confirme. Servidores que exigem credenciais precisarão de suas variáveis de ambiente antes do uso.`,loadingServers:`Carregando servidores...`,noServers:`Nenhum servidor MCP configurado`,noServersHint:`Mude para a aba Recomendados para adicionar servidores populares, ou Personalizado para os seus.`,addCustomBody:`Configure um servidor MCP personalizado com transporte stdio, SSE ou HTTP.`,addCustomBodyHint:`Para servidores populares, use a aba Recomendados — tudo já está pré-configurado.`,removeConfirmTitle:`Remover o servidor "{{name}}"?`,removeConfirmBody:`Isso remove o servidor MCP da sua configuração.`,toastAdded:`Servidor "{{name}}" adicionado`,toastRemoved:`Servidor "{{name}}" removido`,toastDiscovered:`Descobertas {{count}} ferramentas de "{{name}}"`,toastSleeping:`O servidor "{{name}}" está inativo`,toastConnected:`Servidor "{{name}}" conectado`,toastReconnected:`Servidor "{{name}}" reconectado`,toastDisconnected:`Servidor "{{name}}" desconectado: {{reason}}`,toastError:`Servidor "{{name}}" erro: {{error}}`},c={title:`Limpar a allowlist salva?`,body_one:`Isso removerá o modelo fixado para {{provider}}. O seletor de modelos voltará ao catálogo models.dev.`,body_other:`Isso removerá os {{count}} modelos fixados para {{provider}}. O seletor de modelos voltará ao catálogo models.dev.`,undoHint:`Você pode desfazer por 8 segundos após confirmar.`,keepTitle:`Manter allowlist (Esc)`,clearTitle:`Limpar allowlist (Enter)`,clear:`Limpar allowlist`},l={termsWarning:`Entre com uma assinatura em vez de uma chave de API. Usar uma assinatura fora de seu cliente oficial pode violar os Termos do provedor — sua conta pode ser limitada ou banida. Uma chave de API é o caminho sancionado para uso programático.`,signIn:`Entrar`,waitingBrowser:`Aguardando seu login…`,openSignIn:`Abrir página de login`,pasteLoopbackBusy:`Porta loopback ocupada — cole a URL de redirecionamento`,pasteCantReach:`O navegador não alcança este servidor? Cole a URL de redirecionamento`,submit:`Enviar`,enterCode:`Insira este código na página de verificação:`,openVerification:`Abrir página de verificação`,waitingCode:`Aguardando autorização…`,exchanging:`Trocando tokens…`,fetchingModels:`Buscando modelos…`,signedIn:`Conectado.`,signedInToast:`Conectado — {{provider}}`,signInFailed:`Login falhou`,accountCount_one:`{{count}} conta salva`,accountCount_other:`{{count}} contas salvas`,active:`Ativo`,inactive:`Inativo`,retry:`Repetir`,retryLogin:`Reautenticar esta conta`,newAccount:`Nova conta`,aliasPlaceholder:`ex. {{default}}`},u={showThinkingLabel:`Mostrar registros de raciocínio`,showThinkingHint:`Exibe os blocos de raciocínio concluídos no histórico do chat.`,groupToolCallsLabel:`Agrupar chamadas de ferramentas`,groupToolCallsHint:`Agrupa chamadas consecutivas de ferramentas em um único indicador.`,autoCollapseInputLabel:`Recolher editor sob o histórico`,autoCollapseInputHint:`Ao carregar uma sessão com mensagens, recolher o editor sob o histórico. Desativado por padrão — o editor permanece expandido até ser recolhido manualmente.`,themeHeading:`Tema`,themeLight:`Claro`,themeDark:`Escuro`,themeSystem:`Sistema`,themeSystemHint:`Sistema segue a preferência claro/escuro do seu sistema operacional.`,preferencesHeading:`Preferências`,compactDensity:`Densidade compacta`,compactDensityHint:`Espaçamento mais estreito em todo o chat.`,soundOnComplete:`Som ao concluir`,soundOnCompleteHint:`Reproduz um toque suave quando uma execução termina.`,titleAnimation:`Animação do título`,titleAnimationHint:`Mostrar título animado do terminal no CLI.`,thinkingWordLabel:`Palavra de raciocínio (CLI/TUI)`,thinkingWordHint:`Palavra exibida no chip de status da TUI. Uma única palavra curta.`,statuslineModeLabel:`Modo da linha de status (CLI/TUI)`,statuslineModeHint:`Densidade da linha de status da TUI.`,statuslineModeDetailed:`Detalhado`,statuslineModeMinimum:`Mínimo`,statuslineModeNoColor:`Sem cor`,animationStyleLabel:`Estilo de animação (CLI/TUI)`,animationStyleHint:`Animação do chip de trabalho da TUI.`,animationStyleRainbow:`Arco-íris`,animationStyleWave:`Onda`,animationStylePulse:`Pulso`,animationStyleDots:`Pontos`,animationStyleBreathe:`Respiração`,animationStyleStatic:`Estático`,animationStyleCycle:`Ciclo`,languageHeading:`Idioma`,languageLabel:`Idioma da interface`,languageHint:`Altera apenas o texto da interface. Prompts, skills e a saída do modelo não são afetados.`,paletteHeading:`Paleta de cores`,paletteSwitcherTitle:`Paleta de cores`,paletteHint:`Escolha a cor principal (e suas derivadas). As superfícies neutras permanecem as mesmas.`,paletteSignal:`Sinal`,paletteEmeraldGold:`Esmeralda e dourado`,paletteBlueNavy:`Azul-marinho`,palettePurplePink:`Roxo e rosa`,paletteCyanTeal:`Ciano e verde-azulado`,paletteRoseCopper:`Rosa e cobre`,paletteIndigoAmber:`Índigo e âmbar`,paletteSageSand:`Salvia e areia`,paletteSlateViolet:`Lousa e violeta`,paletteCoralMint:`Coral e hortelã`,paletteArcticEmber:`Ártico e brasa`,paletteMossRust:`Musgo e ferrugem`},d={autonomyHeading:`Autonomia e Comportamento`,autonomyModeLabel:`Modo de autonomia`,autonomyModeHint:`Quão independentemente o agente prossegue entre turnos.`,autonomyModeOff:`Desativado — controle manual total`,autonomyModeSuggest:`Sugerir — sugere os próximos passos`,autonomyModeAuto:`Auto — breve atraso de confirmação`,autonomyModeEternal:`Eterno — autônomo até o objetivo concluído`,autonomyModeEternalParallel:`Eterno Paralelo — frota multi-agente`,autoProceedDelayLabel:`Atraso de auto-prosseguir`,autoProceedDelayHint:`Milissegundos antes de o agente auto-prosseguir no modo Auto. 0 = imediato.`,yoloLabel:`Modo YOLO`,yoloHint:`Executar chamadas de ferramentas sem perguntar, exceto os tipos de dano listados abaixo.`,yoloConfirmHeading:`Ainda perguntar sobre`,yoloConfirmIntro:`O YOLO executa todo o resto sem supervisao. Estes sao os tipos de dano diante dos quais ele para e pergunta.`,yoloConfirmLockedNote:`Estes dois sempre perguntam. Eles escrevem os arquivos que decidem se voce sera consultado, entao desliga-los deixaria o agente desligar o proprio sistema de aprovacao.`,yoloKindLocked:`sempre pergunta`,yoloKind:{"disk-wipe":{label:`Apagar um disco`,hint:`mkfs, dd para um dispositivo bruto, format C:, fork bomb`},"system-halt":{label:`Desligar ou reiniciar`,hint:`shutdown, reboot`},"delete-outside":{label:`Apagar fora do projeto`,hint:`exclusao recursiva forcada que sai do projeto ou atinge uma raiz de sistema ou home`},"git-history":{label:`Reescrever o historico do git`,hint:`reset --hard, clean -f, push --force, filter-branch`},publish:{label:`Publicar ou implantar`,hint:`npm publish, docker push, kubectl delete namespace`},"download-and-run":{label:`Executar codigo baixado`,hint:`curl | sh e cargas inline que baixam e executam`},"bulk-delete":{label:`Apagar em massa`,hint:`find -exec rm, rmSync inline em muitos caminhos`},"agent-state":{label:`Escrever o estado do proprio WrongStack`,hint:`config.json, trust.json, auth.json`},"credential-bind":{label:`Vincular uma chave de API a um endpoint`,hint:`anexar uma chave conhecida a uma URL de provedor`}},refineHeading:`Refinamento de Prompt`,enableRefineLabel:`Ativar refinamento`,enableRefineHint:`Reescreve os prompts antes de enviar — instruções mais claras, melhores resultados.`,refineDelayLabel:`Atraso de refinamento`,refineDelayHint:`Contagem regressiva antes do envio automático do prompt refinado.`,refineLanguageLabel:`Idioma de refinamento`,refineLanguageHint:`Mantenha seu idioma ou traduza para inglês para o modelo.`,refineLanguageOriginal:`Original — mantenha seu idioma`,refineLanguageEnglish:`Inglês — traduzir para inglês`,refinerProviderLabel:`Provedor do refinador`,refinerProviderHint:`Id do provedor para o refinamento de objetivos. Vazio = usar o provedor da sessão.`,refinerProviderDefault:`Provedor da sessão`,refinerModelLabel:`Modelo do refinador`,refinerModelHint:`Id do modelo para o refinamento de objetivos. Vazio = usar o modelo da sessão.`,refinerModelDefault:`Modelo da sessão`,refinerProfileLabel:`Perfil de fallback do refinador`,refinerProfileHint:`Perfil de fallback nomeado para refinamento de objetivos. Substitui o provedor e o modelo.`,refinerProfileDefault:`Nenhum — usar provedor e modelo ou os padrões da sessão`,reasoningHeading:`Raciocínio e Cache`,reasoningModeLabel:`Modo de raciocínio`,reasoningModeHint:`Controla como o modelo usa o pensamento estendido. Auto = padrão do provedor.`,reasoningModeAuto:`Auto — padrão do provedor`,reasoningModeOn:`Ligado — forçar pensamento`,reasoningModeOff:`Desligado — desativar pensamento`,reasoningEffortLabel:`Esforço de raciocínio`,reasoningEffortAuto:`Auto (geral)`,reasoningEffortAutoHint:`Configuração geral: {{value}}`,reasoningEffortHint:`Quanto compute o modelo gasta pensando. Enviado apenas quando o modelo suporta.`,reasoningEffortNone:`Nenhum`,reasoningEffortMinimal:`Mínimo`,reasoningEffortLow:`Baixo`,reasoningEffortMedium:`Médio`,reasoningEffortHigh:`Alto`,reasoningEffortXhigh:`Muito alto`,reasoningEffortMax:`Máx`,preserveThinkingLabel:`Preservar pensamento`,preserveThinkingHint:`Mantém os blocos de raciocínio entre turnos para continuidade de contexto.`,cacheTtlLabel:`TTL de cache`,cacheTtlHint:`Tempo de vida do cache de prompt. 1h custa mais na escrita mas economiza em releituras (Anthropic).`,cacheTtlDefault:`Padrão — padrão do provedor`,cacheTtl5m:`5 minutos`,cacheTtl1h:`1 hora`,capsHint:`Use wstack models caps para verificar o que o modelo atual suporta. Configurações não suportadas são omitidas silenciosamente por requisição.`,routingHeading:`Roteamento de modelo`,routingRouteKey:`Chave de rota de modelo`,routingPhasesGroup:`Fases`,routingRolesGroup:`Funções {{label}}`,routingCustomGroup:`Rotas personalizadas existentes`,routingTargetAria:`Destino da rota de modelo`,routingTargetEmpty:`— Limpar rota —`,routingTargetProfilesGroup:`Perfis de fallback`,routingTargetModelsGroup:`Modelos (provedor/modelo)`,routingSet:`Definir`,routingReasoningModeAria:`Modo raciocínio nova rota`,routingReasoningEffortAria:`Esforço raciocínio nova rota`,routingReasoningPreserveAria:`Preservação raciocínio nova rota`,routingReasoningModeFor:`Modo raciocínio para {{key}}`,routingReasoningEffortFor:`Esforço raciocínio para {{key}}`,routingReasoningPreserveFor:`Preservação raciocínio para {{key}}`,noRoutes:`Ainda não há rotas de modelo.`,leaderModel:`modelo líder`,autonomyDelayMsLabel:`Atraso de continuação automática`,autonomyDelayMsHint:`Milissegundos antes de o agente continuar automaticamente no modo Auto. 0 = imediato.`,refineCountdownLabel:`Contagem regressiva de refinamento`,refineCountdownHint:`Período de carência antes do envio automático do prompt refinado (milissegundos).`,reasoningEffortModelSet:`níveis do modelo ativo`,reasoningEffortUnsupported:`Não oferecido por este modelo (suportados: {{levels}}) — a configuração será omitida.`},f={heading:`Execução`,maxIterationsLabel:`Iterações máx por run`,maxIterationsHint:`Teto rígido de turnos LLM por agent.run().`,autoProceedMaxIterationsLabel:`Iterações máx de auto-prosseguir`,autoProceedMaxIterationsHint:`Para o auto-prosseguir após N iterações. 0 = ilimitado.`,confirmExitLabel:`Confirmar antes de sair`,confirmExitHint:`Primeiro Ctrl+C aborta o trabalho, segundo confirma a saída.`,chimeLabel:`Som ao concluir`,chimeHint:`Campainha do terminal quando um run de agente termina.`,breakerLabel:`Disjuntor de processos`,breakerHint:`Bloqueia bash/exec após falhas repetidas; ao disparar, arma a contagem de kill/reset.`,breakerTimeoutLabel:`Tempo de kill/reset do disjuntor`,breakerTimeoutHint:`Atraso antes do kill/reset automático ao disparar. 0 = recuperação manual.`,availabilityHeading:`Provider/model availability calendar`,availabilityHint:`Prevent autonomous and overnight runs from using selected providers or models during recurring windows.`},p={heading:`Modelos fallback / round-robin`,body:`Quando o modelo ativo é rate-limitado (429/529), dá erro 5xx ou trava — após suas próprias retentativas — o agente rotaciona para o próximo modelo desta cadeia. Também usado como padrão para os sub-agentes workers do SDD.`,autoFallbackLabel:`Fallback automático`,autoFallbackHint:`Quando a cadeia acima está vazia, derive uma automaticamente de seus provedores com chave.`,favoritesOnlyLabel:`Apenas favoritos`,favoritesOnlyHint:`Quando o fallback automático deriva uma cadeia, restrinja-a aos seus modelos favoritos.`,profilesHeading:`Perfis fallback / round-robin`,addProfile:`Adicionar`,noProfiles:`Ainda não há perfis de fallback nomeados.`,createDefault:`Criar padrão a partir do modelo ativo`,useChain:`Usar cadeia`,setLeader:`Definir líder`,profileEmpty:`O perfil está vazio.`,favoritesHeading:`Modelos favoritos`,favoritesEmpty:`Os favoritos são mostrados primeiro e podem restringir o fallback automático.`,addModelToProfile:`Adicionar modelo ao perfil…`,addFavoriteModel:`Adicionar modelo favorito…`,inactive:`inativo`},m={heading:`Frota e Streaming`,fleetChatVerbosityLabel:`Transmitir eventos da frota`,fleetChatVerbosityHint:`Mostra a atividade ao vivo dos sub-agentes no painel da frota.`,maxConcurrentLabel:`Sub-agentes concorrentes máx`,maxConcurrentHint:`Número máximo de sub-agentes que podem rodar simultaneamente.`,nextPredictionLabel:`Previsão do próximo passo`,nextPredictionHint:`Após um turno, prevê os prováveis próximos passos.`,nextStepsToolLabel:`Ferramenta nextsteps`,nextStepsToolHint:`Permite que o agente registre as sugestões com uma chamada de ferramenta em vez de escrever o bloco manualmente. Vale na próxima sessão.`},h={hqHeading:`Cliente HQ`,hqPublishingLabel:`Publicação HQ`,hqPublishingHint:`Publica esta sessão WebUI/cliente no WrongStack HQ. Clientes da mesma máquina podem auto-descobrir a auth HQ local; clientes remotos usam a URL/token abaixo.`,hqUrlLabel:`URL HQ`,hqUrlHint:`Deixe vazio para auto-descoberta na mesma máquina.`,hqTokenLabel:`Token do cliente HQ`,hqRawContentLabel:`Conteúdo HQ bruto`,hqRawContentHint:`Enviar pré-visualizações de conteúdo brutas para HQ em vez de pré-visualizações redigidas.`,wrongProxyHeading:`WrongProxy / WrongTrace`,wrongProxyEnabledLabel:`Rotear URLs base pelo proxy local`,wrongProxyEnabledHint:`Quando ativado, a URL base de cada provedor é reescrita pelo proxy configurado (padrão http://localhost:3444/proxy/<host><path>). openai-codex é excluído — ele fala diretamente com o backend do ChatGPT usando um token OAuth.`,wrongProxyUrlLabel:`URL do proxy`,wrongProxyUrlHint:`Onde o daemon proxy local escuta. O sistema verifica periodicamente <url>/api/health; um daemon inacessível desativa a reescrita sem tentar novamente a cada tecla.`,wrongProxyChangesApply:`As alterações se aplicam imediatamente às próximas requisições — sem necessidade de reiniciar.`,telegramHeading:`Notificações do Telegram`,telegramSessionEndLabel:`Fim de sessão`,telegramSessionEndHint:`Envia um resumo quando uma sessão termina.`,telegramDelegateLabel:`Delegado concluído`,telegramDelegateHint:`Envia uma nota humanizada quando um sub-agente conclui.`,telegramLongToolLabel:`Ferramentas longas`,telegramLongToolHint:`Notifica quando uma ferramenta excede {{ms}}ms. 0 para desativar.`,telegramChangesApply:`As mudanças se aplicam imediatamente.`,telegramNotConfigured:`O Telegram não está configurado. Execute /telegram-setup na CLI para conectar um bot primeiro.`,heading:`Integrations`,disabledHint:`Ative o recurso na aba Contexto para usar esta seção.`},g={chimeraDedicatedHeading:`Chimera — Post-session Code Review`,chimeraDedicatedHint:`Automated code quality review that runs after every agent session. Catches regressions, anti-patterns, and potential bugs.`,chimeraSectionEnabled:`Post-session review (Chimera)`,chimeraSectionEnabledHint:`Run a code review agent after every iteration.`,chimeraProviderLabel:`Chimera provider`,chimeraProviderHint:`Provider for the review agent. Select one from your configured providers.`,chimeraProviderSessionDefault:`Session default`,chimeraModelLabel:`Model`,chimeraModelSessionDefault:`Session default`,chimeraModelHint:`Model for the review agent. Requires a provider first.`,chimeraMaxFilesLabel:`Max files per review`,chimeraMaxFilesHint:`Maximum number of changed files included in a single review call.`,chimeraAutoFixLabel:`Auto-fix mode`,chimeraAutoFixHint:`Whether the review agent should automatically apply fixes for issues it finds.`,chimeraAutoFixOff:`Off — review only`,chimeraAutoFixAsk:`Ask — confirm before applying`,chimeraAutoFixAuto:`Auto — apply without confirmation`,autoReviewCascadeOnLabel:`Cascata em`,autoReviewCascadeOnHint:`Quando uma revisão encontra problemas nesta gravidade ou superior, inicia agentes de acompanhamento.`,autoReviewCascadeOnOff:`Desativado`,autoReviewCascadeOnHigh:`Alta ou superior`,autoReviewCascadeOnCritical:`Apenas crítica`,chimeraPickModel:`Pick provider/model for Chimera`,chimeraPickModelHint:`Select a provider and model for post-session code review.`,autoReviewSectionEnabled:`Mid-session review (Auto-Review)`,autoReviewSectionEnabledHint:`Run a review agent mid-session on every file change.`,autoReviewFallbackProfileLabel:`Perfil fallback / round-robin`,autoReviewFallbackProfileHint:`Perfil de modelos para auto-review; fornece o pool de fallback e os modelos para round-robin ou seleção aleatória.`,autoReviewFallbackProfileNone:`None — use provider+model or session defaults`,autoReviewModelSelectionLabel:`Seleção do perfil`,autoReviewModelSelectionHint:`Escolhe o próximo modelo na ordem ou um modelo inicial aleatório para cada revisão.`,autoReviewModelSelectionRoundRobin:`Round-robin — ordem do perfil`,autoReviewModelSelectionRandom:`Aleatório — escolher do perfil`,autoReviewFallbackModelsLabel:`Modelos fallback / round-robin`,autoReviewFallbackModelsEmpty:`Nenhum modelo fallback / round-robin configurado`,autoReviewFallbackModelsHint:`Modelos do perfil ou cadeia global; formam o pool de seleção e a cadeia de nova tentativa.`,autoReviewModelLabel:`Model`,autoReviewModelHint:`Model for the auto-review agent. Requires a provider first.`,autoReviewDebounceLabel:`Debounce interval (ms)`,autoReviewDebounceHint:`Minimum gap between review triggers after a file change.`,autoReviewMaxFilesLabel:`Max files per batch`,autoReviewMaxFilesHint:`Files per auto-review call.`,autoReviewMaxConcurrentLabel:`Max concurrent reviews`,autoReviewMaxConcurrentHint:`Parallel review subagent cap.`,autoReviewCascadeLabel:`Cascade on`,autoReviewCascadeHint:`Follow-up agent threshold — spawns security-scanner and bug-hunter above this severity.`,autoReviewCascadeOff:`Off — no cascade`,autoReviewCascadeCritical:`Critical — only critical findings`,autoReviewCascadeHigh:`High — critical or high findings`,autoReviewPickModel:`Pick provider/model for Auto-Review`,autoReviewPickModelHint:`Select a provider and model, or a named fallback profile, for mid-session auto-review.`,pluginsPerPluginHint:`Enable or disable individual plugins. Changes take effect on next session.`},_={flagsHeading:`Sinalizadores de Recursos`,mcpLabel:`Servidores MCP`,mcpHint:`Habilita integrações Model Context Protocol.`,pluginsLabel:`Plugins`,pluginsHint:`Carrega e executa plugins instalados pelo usuário.`,memoryLabel:`Memória`,memoryHint:`Persiste e recupera fatos entre sessões.`,skillsLabel:`Habilidades`,skillsHint:`Carrega prompts de habilidades específicas do domínio.`,modelsRegistryLabel:`Registro de modelos`,modelsRegistryHint:`Usa o catálogo models.dev para descoberta de provedores.`,indexOnStartLabel:`Indexar ao iniciar`,indexOnStartHint:`Constrói o índice de símbolos do código ao iniciar a sessão.`,pluginsPerPluginHeading:`🔌 Per-Plugin Controls`,pluginsPerPluginHint:`Enable or disable individual plugins. Changes take effect on next session.`,pluginChimera:`Chimera — post-session code review`,pluginSkills:`Skills — skill library & authoring`,pluginPrompts:`Prompts — prompt library & gen`,pluginCostTracker:`Cost Tracker — token & cost tracking`,pluginTelegram:`Telegram — notification bot`,pluginKnowledgeGraph:`Knowledge Graph — persistent facts`,pluginErrorLens:`Error Lens — failure diagnostics`,pluginTodoTracker:`Todo Tracker — persistent todos`,pluginSecretScanner:`Secret Scanner — credential detection`,pluginLintGate:`Lint Gate — lint before iteration`,pluginDiffSummary:`Diff Summary — compact diffs`,pluginDepGuard:`Dep Guard — dependency rules`,pluginTypeGate:`Type Gate — typecheck before iteration`,pluginInjectionShield:`Injection Shield — prompt injection`,pluginPromptFirewall:`Prompt Firewall — input filtering`,pluginTokenBudget:`Token Budget — token limits`,pluginLoopBreaker:`Loop Breaker — runaway detection`,heading:`Contexto e Depuração`,autoCompactLabel:`Auto-compactar contexto`,autoCompactHint:`Apara automaticamente a janela de contexto perto dos limites.`,compactorStrategyLabel:`Estratégia de compactação`,compactorStrategyHint:`Como o contexto é compactado quando cresce demais.`,compactorStrategyHybrid:`Híbrida — regras rápidas (padrão)`,compactorStrategyIntelligent:`Inteligente — resumo LLM`,compactorStrategySelective:`Seletiva — seleção guiada por LLM`,contextModeLabel:`Modo de contexto`,contextModeHint:`Política de janela de contexto — equilibrado é o padrão.`,contextModeBalanced:`Equilibrado — uso normal do contexto`,contextModeFrugal:`Frugal — uso conservador de tokens`,contextModeDeep:`Profundo — contexto maior para tarefas complexas`,tokenSavingLabel:`Modo de economia de tokens`,tokenSavingHint:`Controla os esquemas diretos e o prompt do sistema da próxima sessão.`,tokenSavingAuto:`Auto — adaptar o prompt à janela do modelo`,tokenSavingOff:`Desativado — sem economia`,tokenSavingMinimal:`Mínimo — otimização básica`,tokenSavingLight:`Leve — redução moderada`,tokenSavingMedium:`Médio — economias significativas`,tokenSavingAggressive:`Agressivo — menor superfície direta e prompt`},v={logLevelLabel:`Nível de log`,logLevelHint:`Severidade mínima para logging do lado servidor.`,logLevelDebug:`Debug — tudo`,logLevelInfo:`Info — fluxo normal`,logLevelWarn:`Warn — apenas problemas`,logLevelError:`Error — apenas falhas`,auditLevelLabel:`Nível de auditoria`,auditLevelHint:`Nível de detalhe para logs de auditoria de sessão.`,auditLevelMinimal:`Mínimo — apenas erros`,auditLevelStandard:`Padrão — chamadas de ferramentas + erros`,auditLevelFull:`Completo — cada evento (logs grandes)`,fsAccessLabel:`Acesso ao sistema de arquivos`,fsAccessHint:`Escopo das ferramentas de arquivo. Aplica-se na próxima sessão.`,fsAccessUnrestricted:`Irrestrito — qualquer caminho`,fsAccessProject:`Projeto — limitado à raiz do projeto`,debugStreamLabel:`Fluxo de depuração`,debugStreamHint:`Dump hex SSE bruto no stderr do servidor para depurar provedores.`,heading:`Logs & Debug`},y={heading:`Security & Monitoring`,brainHeading:`🧠 Brain — Controle de decisões`,brainHint:`Modelos de decisão, conselho, escalonamento e teto de risco — aplicados na hora e salvos na configuração global.`,shadowHeading:`👁 Agente sombra — Monitor da frota`,shadowHint:`O agente sombra monitora todos os agentes da frota, acompanha suas tarefas e detecta anomalias.`,toolsHeading:`🔧 Tool Access Control`,toolsHint:`Ative ou desative ferramentas individuais. Ferramentas que alteram dados aparecem em âmbar.`,breakerHeading:`Process Circuit Breaker`,breakerHint:`Restringe bash/exec após falhas repetidas; o acionamento inicia a contagem regressiva de encerramento/reinício.`},b={switchingTo:`Mudando para {{provider}} / {{model}}…`,switching:`Mudando o modelo…`,switchingToTarget:`Mudando para {{target}}…`,previousModel:`modelo anterior`,modelSwitchedNextRequest:`Modelo alterado: {{from}} → {{to}}. Ativo na próxima solicitação ao LLM.`,modelSwitchedRunActive:`Modelo alterado: {{from}} → {{to}}. Ativo na próxima solicitação ao LLM; a execução atual continua sem reiniciar.`,fallbackExists:`O perfil de fallback "{{name}}" já existe`,selectProviderModelFirst:`Selecione um provedor e um modelo primeiro`,defaultProfileCreated:`Perfil de fallback padrão criado`,profileEmpty:`O perfil de fallback "{{name}}" está vazio`,leaderSetFrom:`Líder definido a partir de {{name}}`,modelSwitchTimeout:`Troca de modelo expirou. Por favor, tente novamente.`},x={workbenchHeading:`Aparência do workbench`,workbenchHint:`Alterna a visibilidade das superfícies do workbench na vista de chat.`,showModelReasoningLabel:`Mostrar raciocínio do modelo`,showModelReasoningHint:`Renderiza blocos de raciocínio/thinking do LLM no histórico do chat (paridade com TUI).`,showAgentSwarmPanelLabel:`Painel agent swarm`,showAgentSwarmPanelHint:`Controla onde o painel agent swarm (fleet + fila de missões) é exibido.`,swarmPanelBottom:`Painel inferior`,swarmPanelSidebar:`Barra lateral direita`,swarmPanelOff:`Desativado`,titleAnimationLabel:`Animação do título`,titleAnimationHint:`Anima o título do terminal/aba com o status de execução (paridade com TUI).`,keyboardShortcutsLabel:`Atalhos de teclado`,keyboardShortcutsHint:`Habilitar atalhos de teclado globais (Ctrl+K, Alt+1..4, etc.). Desativado por padrão.`,statusChipHeading:`Chip de status e barra de status`,statusChipHint:`Estilo visual para a barra de status TUI/CLI e o chip de trabalho.`,thinkingWordLabel:`Palavra de raciocínio`,thinkingWordHint:`Palavra curta única exibida no chip de status TUI enquanto o agente trabalha.`,statuslineModeLabel:`Modo da barra de status`,statuslineModeHint:`Densidade da barra de status TUI.`,statuslineModeMinimum:`Mínimo`,statuslineModeDetailed:`Detalhado`,statuslineModeNoColor:`Sem cor`,animationStyleLabel:`Estilo de animação`,animationStyleHint:`Animação do chip de trabalho TUI.`,animationStyleRainbow:`Arco-íris`,animationStyleWave:`Onda`,animationStylePulse:`Pulso`,animationStyleDots:`Pontos`,animationStyleBreathe:`Respiração`,animationStyleStatic:`Estático`,animationStyleCycle:`Ciclo`,refineHeading:`Contagem regressiva do refine e diffs`,refineHint:`Configura a contagem regressiva pré-refine e o limite mínimo de arquivos para o rodapé de resumo multi-diff.`,preRefineSecondsLabel:`Contagem regressiva pré-refine`,preRefineSecondsHint:`Período de carência antes do refiner iniciar (segundos). 0 = pula a contagem e refina imediatamente.`,preRefineSecondsPresets:`Predefinições: {{presets}} segundos (0 = desativado).`,multiDiffSummaryLabel:`Resumo multi-diff`,multiDiffSummaryHint:`Número mínimo de arquivos antes que o rodapé agregado 'N arquivos · +X -Y' apareça acima dos blocos por arquivo.`,multiDiffSummaryPresets:`Predefinições: {{presets}} (0 = desativado).`,memoryHeading:`Ferramenta read e injeção de memória SAGE`,memoryHint:`Alterna o que a ferramenta read inclui e quando blocos de memória SAGE aparecem nos resultados de ferramentas.`,readSymbolsLabel:`Ler símbolos`,readSymbolsHint:`Quando ativo, a ferramenta read inclui símbolos do índice do código junto com o conteúdo do arquivo.`,showSageMemoryInjectLabel:`Mostrar SAGE Memory Inject`,showSageMemoryInjectHint:`Quando ativo, mostra blocos de injeção de memória SAGE nos resultados de ferramentas.`,sageMemoryInjectThresholdLabel:`Limite de SAGE Memory Inject`,sageMemoryInjectThresholdHint:`Força mínima de relação necessária para uma memória SAGE injetada (0.72–0.95).`,footnote:`Estas configurações refletem o picker /settings do TUI. Alternâncias aplicam-se ao vivo; alguns campos exigem reinício da sessão.`,sageRelaxed:`0,72 (relaxado)`,sageDefault:`0,85 (padrão)`,sageStrict:`0,95 (rigoroso)`},S=`Redefinir`,C=`Cancelar`,w=`Redefinir todas as preferências?`,T=`Isso restaura as configurações padrão e recarrega a página.`,E=`Redefinir`,D=JSON.parse(`{"heading":"Brain","headingHint":"Modelos de decisão, conselho, escalada e teto de risco — aplicados em tempo real, salvos na configuração global.","riskHeading":"Teto de autonomia","escalationHeading":"Escalada","escalationModeLabel":"Modo","escalationModeHint":"Headless: o Brain nunca bloqueia esperando um humano — escaladas sem resposta são resolvidas pela política terminal segura. Aplica-se a sessões CLI/TUI; o Brain WebUI independente é sempre headless.","escalationDecisionTimeoutLabel":"Tempo limite de decisão","escalationDecisionTimeoutHint":"Orçamento de tempo por chamada LLM para uma decisão do Brain.","escalationHumanTimeoutLabel":"Tempo limite de resposta humana","escalationHumanTimeoutHint":"Modo interativo: quanto tempo um aviso de escalada pode esperar antes que a política terminal o resolva.","escalationTerminalPolicyLabel":"Política terminal","escalationTerminalPolicyHint":"Como uma escalada headless é resolvida sem humano disponível. Conservador aceita uma opção recomendada em risco baixo/médio; negar-tudo nunca aceita automaticamente; continuar-com-recomendação aceita uma opção recomendada em QUALQUER risco.","escalationDecisionLogSizeLabel":"Tamanho do registro de decisões","escalationDecisionLogSizeHint":"Registro de decisões em memória rotativo mantido para a visão de status.","rulesHeading":"Regras determinísticas","rulesConfigured":"{{count}} configurada(s)","rulesBody":"Avaliadas antes de qualquer chamada ao provedor — a primeira correspondência vence. Edite-as no arquivo de configuração global; esta visão é somente leitura.","rulesOff":"desativada","rulesDropped":"{{count}} regra(s) descartada(s)","heuristicsHeading":"Heurísticas","heuristicsBody":"Suposições de padrão gratuitas que resolvem uma pergunta antes que um modelo execute. Todas ativas por padrão — desligue aquela cuja suposição esteja errada para sua carga de trabalho.","heuristicsLowRiskLabel":"Resposta automática de baixo risco","heuristicsLowRiskHint":"Responda automaticamente solicitações de baixo risco que já trazem uma opção recomendada.","heuristicsBlockedLabel":"Bloqueado-resolvido","heuristicsBlockedHint":"'blocked …' mais um marcador de resolução explícito no contexto resolve como continuar.","heuristicsDeadlockLabel":"Pular impasse","heuristicsDeadlockHint":"'deadlock' mais unidades de trabalho falhas no contexto resolve como pular e continuar.","heuristicsRetryLabel":"Novas tentativas esgotadas","heuristicsRetryHint":"'failed'/'retry' mais novas tentativas comprovadamente esgotadas marca a unidade como falha e segue.","heuristicsPingLabel":"Ping de continuação","heuristicsPingHint":"Um simples ping de continuar/prosseguir sem alternativa concorrente resolve como continuar.","heuristicsMarkers":"Marcadores: {{markers}}","qualityHeading":"Qualidade LLM","qualityCircuit_one":"circuito {{state}} · {{count}} falha","qualityCircuit_other":"circuito {{state}} · {{count}} falhas","qualityResponseBudgetLabel":"Orçamento de resposta","qualityResponseBudgetHint":"Tokens de saída por chamada de decisão. Uma resposta do Brain é uma decisão mais uma justificativa de uma frase.","qualityRejectLabel":"Rejeitar respostas incertas","qualityRejectHint":"Trata uma resposta recusada ou vazia como 'este nível não pôde decidir' em vez de aceitá-la como resposta.","qualityMinConfidenceLabel":"Confiança mínima","qualityMinConfidenceHint":"Rejeita respostas cuja confiança autodeclarada esteja abaixo disso. Respostas sem confiança declarada sempre passam.","qualityDenyTerminalLabel":"A recusa é terminal","qualityDenyTerminalHint":"Se uma recusa do nível LLM único encerra a decisão. 'when-decided' torna terminal uma recusa genuína enquanto falhas de infraestrutura ainda escalam.","traceHeading":"Trilha de replay","traceRecordLabel":"Registrar trilhas de decisão","traceRecordHint":"JSONL por decisão de cada nível, alvo do pool e voto do conselho, com tempos e uso de tokens. Desativado por padrão — ativar grava o conteúdo das decisões em disco.","traceContentLabel":"Conteúdo da trilha","traceContentHint":"'full' mantém pergunta e contexto (necessário para reproduzir uma decisão); 'redacted' trunca texto livre; 'none' registra apenas metadados.","cacheHeading":"Cache de decisões","cacheStats":"{{hits}} acertos / {{misses}} erros · {{size}} ativos","cacheReplayLabel":"Reproduzir vereditos idênticos","cacheReplayHint":"Reutiliza um veredito anterior do conselho/LLM para uma pergunta idêntica repetida. Níveis determinísticos e perguntar-a-um-humano nunca são armazenados; uma decisão que o registro observa como falha é expulsa.","cacheLifetimeLabel":"Vida das entradas","cacheLifetimeHint":"Por quanto tempo um veredito em cache continua reproduzível.","cacheMaxEntriesLabel":"Entradas máximas","cacheMaxEntriesHint":"Limite de vereditos ativos em cache.","monitorHeading":"Monitor","monitorBody":"Auto-ativação por sinais de sofrimento. O monitor é construído uma vez na inicialização, então estes ajustes valem para a próxima sessão, não em tempo real.","monitorWatchLabel":"Vigiar sinais de sofrimento","monitorWatchHint":"Sequências de falhas de ferramentas, tempestades de erros, travamentos de agentes e churn de arquivos acionam o Brain sozinhos.","monitorPolicyLabel":"Política de sinais","monitorPolicyHint":"Como um sinal detectado é resolvido. 'llm' consulta o Brain; 'steer' sempre intervém e 'observe' nunca — ambos sem chamada ao provedor.","modelsHeading":"Modelos de decisão","modelsSessionBadge":"modelo da sessão","modelsResolvedBadge":"{{resolved}}/{{total}} resolvidos","modelsUseSessionLabel":"Usar modelo da sessão","modelsUseSessionHint":"Decidir com o modelo que a sessão está executando. Desligar adicionando modelos abaixo.","modelsAddModel":"Adicionar modelo","modelsPoolStrategyLabel":"Estratégia do pool","modelsPoolStrategyHint":"Fallback: o primeiro modelo é primário, os demais são tentados em ordem na falha. Round-robin: as decisões rotacionam pelo pool.","councilHeading":"Conselho","councilConvened":"convocado","councilDisabled":"desativado","councilEnableLabel":"Ativar conselho multi-LLM","councilEnableHint":"Perguntas de alto risco são votadas por assentos independentes (executor / cético-com-veto / auditor) em vez de um único modelo. Exige ≥2 votantes resolvíveis (assentos explícitos abaixo, ou um pool de ≥2 modelos).","councilSeatsDerived":"Assentos derivados do pool: {{seats}}","councilCustomLens":"Lente de decisão personalizada — enviada ao assento literalmente.","councilCustomOption":"{{persona}} (personalizado)","councilVeto":"veto","councilAddVoter":"Adicionar votante","councilRiskFloorLabel":"Piso de risco","councilRiskFloorHint":"Risco mínimo da pergunta que convoca o conselho em vez do nível mono-modelo.","councilJudge":"Juiz","councilJudgeDesc":"Modelo de desempate que vê a justificativa de cada voto.","councilResolved":"resolvido: {{model}}","councilAlsoVoter":"⚠ também votante","councilAuto":"auto","councilPick":"Escolher…","councilAutoReset":"Auto","councilQuorumLabel":"Quórum","councilQuorumHint":"Fração de assentos que deve retornar um voto válido.","councilApprovalLabel":"Aprovação","councilApprovalHint":"Fração do peso dos votos emitidos que a opção vencedora deve exceder.","councilPerSeatTimeoutLabel":"Tempo limite por assento","councilPerSeatTimeoutHint":"Orçamento de tempo para o voto de um único assento. Mais lento que o tempo de decisão significa que um assento travado segura o voto.","councilMaxConcurrencyLabel":"Concorrência máxima","councilMaxConcurrencyHint":"Quantos assentos votam em paralelo. Reduza quando o pool compartilha um provedor com limite de taxa.","councilDistinctnessLabel":"Distinção de assentos","councilDistinctnessHint":"Rejeita assentos duplicados: 'model' exige modelos distintos, 'provider' provedores independentes para que uma queda não possa influenciar o voto.","councilVoterBudgetLabel":"Orçamento de resposta do votante","councilVoterBudgetHint":"Tokens de saída por chamada de assento — modelos de raciocínio gastam seus tokens de pensamento deste orçamento.","councilRoundsLabel":"Rodadas de deliberação","councilRoundsHint":"A rodada 1 é independente. Nas seguintes, cada assento vê os votos dos demais e pode rever sua posição. Apenas a última rodada é contada, e cada rodada custa mais uma chamada por assento.","councilJudgeBudgetLabel":"Orçamento de resposta do juiz","councilJudgeBudgetHint":"Tokens de saída para a chamada do juiz de desempate.","councilSeatTemplate":"Modelo de assento:","ledgerHeading":"Registro de decisões","ledgerRecordLabel":"Registrar decisões + resultados","ledgerRecordHint":"Persiste cada decisão e seu resultado observado; resultados passados semelhantes são realimentados em prompts futuros do Brain.","ledgerAutoDenyLabel":"Auto-recusar após falhas","ledgerAutoDenyHint":"Recusar deterministicamente (sem LLM) quando este número de aprovações consecutivas de um grupo de decisões terminou em falhas observadas.","ledgerMemoryEntriesLabel":"Entradas em memória","ledgerMemoryEntriesHint":"Tamanho do anel em memória e o número de entradas passadas carregadas do disco na inicialização.","ledgerRetryWindowLabel":"Janela de nova tentativa de intervenção","ledgerRetryWindowHint":"Uma intervenção do monitor do mesmo tipo que se reativa nesta janela marca a orientação anterior como falha.","recentHeading":"Decisões recentes ({{count}})","recentEmpty":"Nenhuma decisão registrada nesta sessão.","optInteractive":"Interativo (pergunte-me)","optHeadless":"Headless (nunca perguntar)","optConservative":"Conservador (padrão)","optDenyAll":"Negar tudo","optContinueRecommended":"Continuar com recomendação","optNeverDefault":"Nunca (padrão)","optWhenDecided":"Quando decidido","optAlways":"Sempre","optFullDefault":"Completo (padrão)","optRedacted":"Redigido","optMetadataOnly":"Somente metadados","optConsultBrain":"Consultar o Brain (padrão)","optAlwaysSteer":"Orientar sempre","optObserveOnly":"Apenas observar","optFallback":"Fallback","optRoundRobin":"Round-robin","optMediumPlus":"Médio+","optHighPlus":"Alto+","optCriticalOnly":"Somente crítico","optNoneDefault":"Nenhum (padrão)","optDistinctModels":"Modelos distintos","optDistinctProviders":"Provedores distintos","optDefault3":"Padrão (3)","optOff":"Desativado","pickPoolTitle":"Adicionar modelo ao pool do Brain","pickPoolHint":"Pool de decisão ordenado — o primeiro é primário.","pickVoterTitle":"Adicionar votante ao conselho","pickVoterHint":"A caixa de diálogo permanece aberta — adicione ≥2 votantes e depois feche.","pickJudgeTitle":"Escolher juiz do conselho","pickJudgeHint":"Desempate que vê cada voto.","persistError":"Configurações aplicadas em tempo real, mas não salvas.","riskCopy":{"off":"Um humano decide tudo","low":"Decidir automaticamente apenas baixo risco","medium":"Decidir automaticamente até risco médio","high":"Decidir automaticamente até alto risco","all":"Decidir automaticamente tudo"},"rulesConfigured_one":"{{count}} configurada","rulesConfigured_other":"{{count}} configuradas"}`),O={default15s:`Padrão (15 s)`,waitForever:`Esperar indefinidamente`,defaultHalf:`Padrão (0,5)`,all:`Todos`,n200Default:`200 (padrão)`,offDefault:`Desativado (padrão)`,n20Default:`20 (padrão)`,m5Default:`5 min (padrão)`,default:`Padrão`,oneSerial:`1 (serial)`,roundsOff:`1 (sem deliberação)`,default500:`Padrão (500)`,default10m:`Padrão (10 min)`},k={capToolCall:`Chamada de ferramenta`,capReasoning:`Raciocínio`,capTemperature:`Temperatura`,capAttachment:`Anexo`,capStructuredOutput:`Saída estruturada`,capOpenWeights:`Pesos abertos`},A={presetsHeading:`Conjuntos de fontes`,presetsHint:`Um conjunto define todas as funções de uma vez; as fontes só são baixadas no primeiro uso.`,presets:{workbench:{label:`Bancada`,description:`A aparência padrão da bancada de trabalho.`},plex:{label:`IBM Plex`,description:`Uma única família técnica do início ao fim.`},modern:{label:`Moderno`,description:`Inter neutra com JetBrains Mono para código.`},geist:{label:`Geist`,description:`Combinação nítida de Geist Sans e Mono.`},classic:{label:`Clássico`,description:`Source Sans, Serif e Code Pro da Adobe.`},editorial:{label:`Editorial`,description:`Títulos serifados e uma fonte de chat com cara de livro.`},readable:{label:`Legível`,description:`Fontes muito legíveis para sessões longas.`},friendly:{label:`Amigável`,description:`Formas arredondadas e descontraídas com Fira Code.`},monospace:{label:`Monoespaçada`,description:`Monoespaçada em todo lugar, estilo terminal.`},system:{label:`Sistema`,description:`Fontes do sistema operacional, sem downloads.`}},rolesHeading:`Fontes por função`,rolesHint:`Substitua qualquer função sobre o conjunto. Funções marcadas com “Igual a” seguem a função principal.`,roles:{ui:{label:`Interface e painéis`,hint:`Botões, menus, barras laterais, listas e configurações.`},display:{label:`Títulos`,hint:`Títulos de página e de seção.`},reading:{label:`Chat e documentos`,hint:`Respostas do assistente, markdown e mensagens da caixa de entrada.`},code:{label:`Código em linha e dados`,hint:`Blocos de código, logs, IDs e dados tabulares.`},editor:{label:`Editor de código`,hint:`Editor de arquivos Monaco e visualização de diferenças.`},terminal:{label:`Terminal`,hint:`Sessões do terminal integrado.`}},fromPreset:`Conjunto ({{name}})`,inherit:`Igual a {{role}} ({{name}})`,categories:{sans:`Sem serifa`,serif:`Serifada`,mono:`Monoespaçada`},systemTag:`sistema`,sizeHeading:`Tamanho e espaçamento`,sizeHint:`O tamanho do texto da interface escala todos os painéis; editor e terminal são definidos em pixels.`,sizePresets:{compact:`Compacto`,normal:`Normal`,comfortable:`Confortável`,large:`Grande`,custom:`Personalizado`},controls:{uiScale:{label:`Tamanho do texto da interface`,hint:`Escala o texto de painéis, chat e diálogos.`},editorFontSize:{label:`Tamanho da fonte do editor`,hint:`Editor Monaco e visualização de diferenças.`},codeLineHeight:{label:`Altura de linha do código`,hint:`Editor, visualização de diferenças e blocos de código.`},terminalFontSize:{label:`Tamanho da fonte do terminal`,hint:`Terminal integrado.`},terminalLineHeight:{label:`Altura de linha do terminal`,hint:`Espaçamento entre linhas do terminal.`},ligatures:{label:`Ligaduras de código`,hint:`Une => !== >= em um único glifo em fontes compatíveis (Fira Code, Cascadia, JetBrains Mono…). Não se aplica ao terminal.`}},previewHeading:`Prévia ao vivo`,preview:{heading:`Refatorar o carregador de sessões`,body:`O agente leu 12 arquivos e propôs uma alteração em duas etapas. Revise as diferenças antes de aplicar.`,label:`Rótulo da interface`},resetAll:`Redefinir todas as configurações de fonte`,resetOverrides:`Limpar substituições por função`},j={title:e,subtitle:t,tabs:n,model:r,connection:i,provider:a,providerModels:o,mcp:s,allowlist:c,oauth:l,general:u,agent:d,execution:f,fallbacks:p,fleet:m,integrations:h,features:g,context:_,logs:v,security:y,toast:b,display:x,resetLabel:S,cancel:C,resetConfirmTitle:w,resetConfirmBody:T,resetConfirmAction:E,brain:D,brainOpt:O,modelSchema:k,fonts:A};export{d as agent,c as allowlist,D as brain,O as brainOpt,C as cancel,i as connection,_ as context,j as default,x as display,f as execution,p as fallbacks,g as features,m as fleet,A as fonts,u as general,h as integrations,v as logs,s as mcp,r as model,k as modelSchema,l as oauth,a as provider,o as providerModels,E as resetConfirmAction,T as resetConfirmBody,w as resetConfirmTitle,S as resetLabel,y as security,t as subtitle,n as tabs,e as title,b as toast};
@@ -1 +0,0 @@
1
- var e=`Paramètres`,t=`Configure every aspect of your agent workspace`,n={general:`Général`,provider:`Fournisseur`,connection:`Connexions`,agent:`Agent`,execution:`Exécution`,fallbacks:`Fallbacks`,routing:`Routage`,fleet:`Flotte`,integrations:`Intégrations`,chimera:`Chimera`,context:`Contexte`,logs:`Journaux`,security:`Sécurité`,display:`Affichage`,displayDesc:`Apparence du workbench, puce d’état, minuteurs de refine et bascules d’injection d’outil/mémoire — reflète le SettingsPicker du TUI.`,generalDesc:`Apparence, langue et préférences d'affichage — reflète le sélecteur de paramètres de la TUI.`,providerDesc:`Clés API, fournisseurs enregistrés et catalogue de fournisseurs.`,connectionDesc:`URL du serveur WebSocket et état de la connexion.`,agentDesc:`Autonomie, affinage du prompt, raisonnement et routage des modèles.`,executionDesc:`Limites d'itérations, comportement de sortie et disjoncteur de processus.`,fallbacksDesc:`Chaîne de repli des modèles, favoris et profils de repli nommés.`,routingDesc:`Matrice de routage des modèles par phase et par rôle.`,fleetDesc:`Concurrence des sous-agents, streaming et prédiction des prochaines étapes.`,integrationsDesc:`Client HQ, serveurs MCP et notifications Telegram.`,chimeraDesc:`Configuration de l'agent de revue de code après session.`,contextDesc:`Interrupteurs de fonctionnalités, stratégie de contexte, compacteur et contrôles des plugins.`,logsDesc:`Niveau de journalisation, détail d'audit, portée d'accès au système de fichiers et flux de débogage.`,securityDesc:`Contrôle décisionnel Brain, agent fantôme et accès aux outils.`,fonts:`Polices`,fontsDesc:`Polices de l’interface, du chat, de l’éditeur et du terminal ; taille, interligne et ligatures.`},r={heading:`Modèle`,loading:`Chargement des modèles...`,notFound:`Aucun modèle trouvé pour ce fournisseur. Le catalogue est peut-être vide ou en cours de chargement.`,selectProviderFirst:`Sélectionnez d'abord un fournisseur`,context:`{{count}}k contexte`},i={providerHealth:{heading:`État des fournisseurs`,hint:`Quels couples fournisseur/modèle sont sains, dégradés ou bloqués, et pourquoi.`,refresh:`Actualiser`,empty:`Aucun fournisseur suivi pour le moment.`,summary:`{{blocked}} bloqués · {{degraded}} dégradés · {{healthy}} sains`,totalFailures:`échecs`,rateLimits:`limitations de débit`,state:{blocked:`Bloqué`,degraded:`Dégradé`,healthy:`Sain`},blocked:`Bloqué`,degraded:`Dégradé`,consecutive:`échecs consécutifs`,retryNow:`Réessayer maintenant`,clear:`Effacer`,allHealthy:`Tous les fournisseurs suivis sont sains.`,statSuccesses:`succès`,statFailures:`échecs`,statRateLimits:`limitations de débit`,statConsecutive:`consécutifs`,lastError:`Dernière erreur`,recentErrors:`Erreurs récentes`,autoRecovery:`Récupération automatique à`,expired:`Expiré`,remainingSecs:`{{secs}} s`,remainingMins:`{{mins}} min`,remainingHours:`{{hours}} h {{mins}} min`,explainHealthy:`Répond normalement.`,explain402:`Limite de facturation atteinte (402). Bloqué environ 15 minutes, jusqu'à la réinitialisation du quota.`,explain403quota:`Limite d'utilisation atteinte pour ce cycle. Bloqué jusqu'au prochain cycle (environ 15 min).`,explain403auth:`Erreur d'autorisation/authentification. Non réessayable — vérifiez la clé API et les droits d'accès.`,explain429:`Limite de débit atteinte (429). Limitation temporaire avec récupération automatique.`,explain529:`Serveur surchargé (529). Le fournisseur subit une forte charge.`,explain5xx:`Erreur serveur ({{status}}). Problème temporaire du backend.`,explainNetwork:`Réseau inaccessible. Vérifiez votre connexion ou la page d'état du fournisseur.`,explainTimeout:`Délai de la requête dépassé (408). Le fournisseur a répondu trop lentement.`,explainStreamHang:`Flux interrompu (599). Le fournisseur s'est arrêté en cours de réponse.`,explainQuota:`Quota épuisé. Bloqué jusqu'à la fenêtre de réinitialisation.`,explainUnknown:`Type d'échec : {{kind}} / état : {{status}}.`},wsUrlLabel:`URL du serveur WebSocket`,wsUrlPlaceholder:`ws://localhost:3456`,wsUrlHint:`URL du serveur WebSocket de l'agent. Le serveur fonctionne en parallèle du CLI.`,startingHeading:`Démarrage du serveur WebSocket`,startingBody:`Pour le développement, lancez ./dev.ps1 depuis la racine du repo (définissez éventuellement WS_HOST/WS_PORT avant). Sinon, lancez la WebUI avec la CLI : wstack --webui.`,healthHeading:`État des connexions`,healthHint:`Rapport en direct sur le propriétaire, le stockage, la file, la surveillance et la latence.`,healthRefresh:`Actualiser`,healthLoading:`Vérification des services…`,healthUnknown:`État inconnu`,healthDisconnected:`Le WebSocket de la WebUI est déconnecté.`,healthRestartRequired:`Redémarrez le backend une fois pour activer le rapport de connexion.`,healthOptional:`À la demande`,endpointInvalidBadge:`chemin du socket trop long`,endpointInvalidRemedy:`Le chemin du socket IPC dépasse la limite de longueur de cette plateforme, donc le démon partagé ne peut pas démarrer. Les requêtes tombent en mode local de processus plus lent. Solution : définissez un TMPDIR plus court (par ex. export TMPDIR=/tmp) et redémarrez WrongStack.`,healthCounts:`{{healthy}} sains · {{attention}} attention · {{sleeping}} en veille`,healthOverall:{healthy:`Services requis sains`,degraded:`Service requis dégradé`,error:`Service requis indisponible`},healthStatus:{healthy:`Sain`,degraded:`Dégradé`,offline:`En veille`,unavailable:`Indisponible`,error:`Erreur`},services:{kanban:{label:`Kanban IPC`},mailbox:{label:`Mailbox IPC`}},serviceActionRestart:`Redémarrer {{label}}`,webuiTransport:`Transport WebUI`,serviceAutoRestarting:`Redémarrage automatique…`},a={savedProviderCount_one:`{{count}} fournisseur`,savedProviderCount_other:`{{count}} fournisseurs`,keyCount_one:`{{count}} clé configurée`,keyCount_other:`{{count}} clés configurées`,activeKeyCount_one:`{{count}} clé active`,activeKeyCount_other:`{{count}} clés actives`,subscriptionHeading:`Connexion par abonnement`,apiKeysHeading:`Fournisseurs de clés API`,apiKeysBody:`Choisissez un fournisseur dans le catalogue et ajoutez une clé API, ou gérez les fournisseurs enregistrés.`,tabCatalog:`Catalogue`,tabSaved:`Enregistrés ({{count}})`,searchPlaceholder:`Rechercher {{count}} fournisseurs (nom / id / famille)…`,loadingCatalog:`Chargement du catalogue...`,noMatch:`Aucun fournisseur ne correspond à « {{query}} ».`,configured:`Configuré`,reachable:`Accessible`,envVar:`ENV : {{var}}`,modelCount_one:`{{count}} modèle`,modelCount_other:`{{count}} modèles`,keyPlaceholder:`Clé API {{name}}`,orEnv:`Ou définissez {{env}} dans l'environnement à la place.`,addApiKey:`Ajouter une clé API`,manageKeys:`Gérez vos clés API et configurations de fournisseur`,addProvider:`Ajouter un fournisseur`,addCustomHeading:`Ajouter un fournisseur personnalisé`,localServers:`Serveurs locaux — cliquez pour pré-remplir :`,providerIdPlaceholder:`ID du fournisseur (ex. my-llm-server)`,apiKeyOptionalPlaceholder:`Clé API (facultatif)`,noSaved:`Aucun fournisseur enregistré`,noSavedHint:`Ajoutez un fournisseur pour démarrer`,apiKeysLabel:`Clés API`,addKey:`Ajouter une clé`,noKeys:`Aucune clé configurée`,active:`Active`,setActive:`Définir comme active`,keyLabelPlaceholder:`Libellé de la clé (ex. default, production)`,apiKeyPlaceholder:`Clé API`,saveKey:`Enregistrer la clé`,savedToast:`Clé enregistrée pour {{name}}`},o={addCustom:`Ajouter un modèle personnalisé`,addCustomTitle:`Ajouter un modèle personnalisé`,addFromCatalog:`Ajouter depuis le catalogue`,catalogSearchPlaceholder:`Rechercher dans le catalogue models.dev…`,catalogSearchTitle:`Rechercher dans le catalogue models.dev`,colActions:`Actions`,colCaps:`Capacités`,colContext:`Contexte`,colCost:`Coût`,colModalities:`Modalités`,colModel:`Modèle`,colOutput:`Sortie`,colSource:`Source`,editModel:`Modifier le modèle`,emptyState:`Aucun modèle pour l'instant — ajoutez depuis le catalogue ou créez un modèle personnalisé.`,fieldContext:`Fenêtre de contexte`,fieldCostInput:`Coût d'entrée`,fieldCostOutput:`Coût de sortie`,fieldDescription:`Description`,fieldFamily:`Famille`,fieldInputLimit:`Limite d'entrée`,fieldInputModalities:`Modalités d'entrée`,fieldLastUpdated:`Dernière mise à jour`,fieldName:`Nom`,fieldOutput:`Sortie max`,fieldOutputModalities:`Modalités de sortie`,fieldReleaseDate:`Date de sortie`,modelAdded:`{{model}} ajouté`,modelRemoved:`{{model}} supprimé`,modelSaved:`{{model}} enregistré`,noResults:`Aucun modèle trouvé`,removeModel:`Supprimer le modèle`,sectionCapabilities:`Indicateurs de capacités`,sectionDates:`Dates`,sectionIdentity:`Identité`,sectionLimits:`Limites`,sectionModalities:`Modalités`,sectionPricing:`Tarifs (par 1M de jetons, USD)`,tabForm:`Formulaire`,tabRawJson:`JSON brut`,typeToSearch:`Saisissez pour rechercher…`,useModel:`Utiliser {{model}}`,usingModel:`Utilisation de {{model}}`,filterPlaceholder:`Filtrer les modèles…`},s={status:{connected:`Connecté`,connecting:`Connexion`,sleeping:`En veille`,discovering:`Découverte`,error:`Erreur`,stopped:`Arrêté`,unknown:`Inconnu`},disabled:`Les serveurs MCP sont désactivés.`,wakeTitle:`Réveiller le serveur`,sleepTitle:`Mettre en veille`,discoverTitle:`Découvrir les outils`,editTitle:`Modifier`,removeTitle:`Supprimer`,statusLabel:`Statut :`,enabledLabel:`Activé :`,yes:`Oui`,no:`Non`,descriptionLabel:`Description :`,pidLabel:`PID :`,errorLabel:`Erreur :`,toolsLabel:`Outils ({{count}}) :`,noTools:`Aucun outil découvert pour le moment`,serverNameRequired:`Le nom du serveur est requis`,dialogTitleEdit:`Modifier le serveur MCP`,dialogTitleAdd:`Ajouter un serveur MCP`,dialogTitleAddCustom:`Ajouter un serveur MCP personnalisé`,fieldName:`Nom`,fieldNamePlaceholder:`ex. github, filesystem`,fieldTransport:`Transport`,fieldUrl:`URL`,fieldCommand:`Commande`,fieldCommandPlaceholder:`ex. npx`,fieldArgs:`Args`,fieldArgsHint:`(séparés par des espaces)`,fieldArgsPlaceholder:`ex. -y @modelcontextprotocol/server-github`,fieldEnv:`Variables d'env`,fieldEnvHint:`(KEY=valeur, une par ligne)`,fieldDescription:`Description`,fieldDescriptionPlaceholder:`Serveur MCP GitHub pour l'accès au dépôt`,enableServer:`Activer le serveur`,lazyConnect:`Connexion différée`,lazyConnectHint:`(ne démarre qu'au premier appel d'outil ; se met en veille quand inactif)`,saveChanges:`Enregistrer`,addServer:`Ajouter le serveur`,requires:`Requiert : {{vars}}`,added:`Ajouté`,heading:`Serveurs MCP`,summary:`{{connected}} connecté(s) · {{sleeping}} en veille · {{total}} au total`,addCustom:`Personnalisé`,tabRecommended:`Recommandés`,tabServers:`Serveurs`,tabAddCustom:`Personnalisé`,recommendedBody:`Ajout en un clic pour les serveurs MCP populaires. Cliquez sur Ajouter pour pré-remplir la configuration, puis confirmez. Les serveurs nécessitant des identifiants devront avoir leurs variables d'env définies avant usage.`,loadingServers:`Chargement des serveurs...`,noServers:`Aucun serveur MCP configuré`,noServersHint:`Passez à l'onglet Recommandés pour ajouter des serveurs populaires, ou Personnalisé pour les vôtres.`,addCustomBody:`Configurez un serveur MCP personnalisé avec transport stdio, SSE ou HTTP.`,addCustomBodyHint:`Pour les serveurs populaires, utilisez plutôt l'onglet Recommandés — tout est préconfiguré.`,removeConfirmTitle:`Supprimer le serveur « {{name}} » ?`,removeConfirmBody:`Cela supprime le serveur MCP de votre configuration.`,toastAdded:`Serveur « {{name}} » ajouté`,toastRemoved:`Serveur « {{name}} » supprimé`,toastDiscovered:`{{count}} outils découverts depuis « {{name}} »`,toastSleeping:`Le serveur « {{name}} » est en veille`,toastConnected:`Serveur « {{name}} » connecté`,toastReconnected:`Serveur « {{name}} » reconnecté`,toastDisconnected:`Serveur « {{name}} » déconnecté : {{reason}}`,toastError:`Serveur « {{name}} » erreur : {{error}}`},c={title:`Effacer la allowlist enregistrée ?`,body_one:`Cela supprimera le modèle épinglé pour {{provider}}. Le sélecteur de modèle reviendra au catalogue models.dev.`,body_other:`Cela supprimera les {{count}} modèles épinglés pour {{provider}}. Le sélecteur de modèle reviendra au catalogue models.dev.`,undoHint:`Vous pouvez annuler pendant 8 secondes après confirmation.`,keepTitle:`Conserver l'allowlist (Échap)`,clearTitle:`Effacer l'allowlist (Entrée)`,clear:`Effacer l'allowlist`},l={termsWarning:`Connectez-vous avec un abonnement au lieu d'une clé API. Utiliser un abonnement en dehors de son client officiel peut enfreindre les Conditions du fournisseur — votre compte pourrait être limité ou banni. Une clé API est la voie sanctifiée pour un usage programmatique.`,signIn:`Se connecter`,waitingBrowser:`En attente de votre connexion…`,openSignIn:`Ouvrir la page de connexion`,pasteLoopbackBusy:`Port loopback occupé — collez l'URL de redirection`,pasteCantReach:`Le navigateur n'atteint pas ce serveur ? Collez l'URL de redirection`,submit:`Soumettre`,enterCode:`Saisissez ce code sur la page de vérification :`,openVerification:`Ouvrir la page de vérification`,waitingCode:`En attente d'autorisation…`,exchanging:`Échange des tokens…`,fetchingModels:`Récupération des modèles…`,signedIn:`Connecté.`,signedInToast:`Connecté — {{provider}}`,signInFailed:`Échec de la connexion`,accountCount_one:`{{count}} compte enregistré`,accountCount_other:`{{count}} comptes enregistrés`,active:`Actif`,inactive:`Inactif`,retry:`Réessayer`,retryLogin:`Ré-authentifier ce compte`,newAccount:`Nouveau compte`,aliasPlaceholder:`ex. {{default}}`},u={showThinkingLabel:`Afficher les journaux de raisonnement`,showThinkingHint:`Affiche les blocs de raisonnement terminés dans l'historique du chat.`,groupToolCallsLabel:`Regrouper les appels d'outils`,groupToolCallsHint:`Regroupe les appels d'outils consécutifs dans une seule puce.`,autoCollapseInputLabel:`Replier la zone de saisie sous l'historique`,autoCollapseInputHint:`Lorsqu'une session avec messages se charge, replier la zone de saisie sous l'historique. Désactivé par défaut — la zone reste dépliée jusqu'à ce que vous la repliiez manuellement.`,themeHeading:`Thème`,themeLight:`Clair`,themeDark:`Sombre`,themeSystem:`Système`,themeSystemHint:`Système suit votre préférence clair/sombre définie au niveau du système d'exploitation.`,preferencesHeading:`Préférences`,compactDensity:`Densité compacte`,compactDensityHint:`Espacement plus serré dans tout le chat.`,soundOnComplete:`Son à la fin de l'exécution`,soundOnCompleteHint:`Émet une douce sonnerie quand une exécution se termine.`,titleAnimation:`Animation du titre`,titleAnimationHint:`Affiche un titre de terminal animé dans le CLI.`,thinkingWordLabel:`Mot de réflexion (CLI/TUI)`,thinkingWordHint:`Mot affiché dans la puce d'état de la TUI. Un seul mot court.`,statuslineModeLabel:`Mode de la ligne d'état (CLI/TUI)`,statuslineModeHint:`Densité de la ligne d'état de la TUI.`,statuslineModeDetailed:`Détaillé`,statuslineModeMinimum:`Minimal`,statuslineModeNoColor:`Sans couleur`,animationStyleLabel:`Style d'animation (CLI/TUI)`,animationStyleHint:`Animation de la puce d'activité de la TUI.`,animationStyleRainbow:`Arc-en-ciel`,animationStyleWave:`Vague`,animationStylePulse:`Pulsation`,animationStyleDots:`Points`,animationStyleBreathe:`Respiration`,animationStyleStatic:`Statique`,animationStyleCycle:`Cycle`,languageHeading:`Langue`,languageLabel:`Langue de l'interface`,languageHint:`Modifie uniquement le texte de l'interface. Les prompts, les compétences et la sortie du modèle ne sont pas affectés.`,paletteHeading:`Palette de couleurs`,paletteSwitcherTitle:`Palette de couleurs`,paletteHint:`Choisissez la couleur principale (et ses dérivées). Les surfaces neutres restent identiques.`,paletteSignal:`Signal`,paletteEmeraldGold:`Émeraude et or`,paletteBlueNavy:`Bleu marine`,palettePurplePink:`Violet et rose`,paletteCyanTeal:`Cyan et sarcelle`,paletteRoseCopper:`Rose et cuivre`,paletteIndigoAmber:`Indigo et ambre`,paletteSageSand:`Sauge et sable`,paletteSlateViolet:`Ardoise et violet`,paletteCoralMint:`Corail et menthe`,paletteArcticEmber:`Arctique et braise`,paletteMossRust:`Mousse et rouille`},d={autonomyHeading:`Autonomie & Comportement`,autonomyModeLabel:`Mode d'autonomie`,autonomyModeHint:`Indépendance de l'agent entre les tours.`,autonomyModeOff:`Désactivé — contrôle manuel complet`,autonomyModeSuggest:`Suggérer — suggère les prochaines étapes`,autonomyModeAuto:`Auto — court délai de confirmation`,autonomyModeEternal:`Éternel — autonome jusqu'à la fin de l'objectif`,autonomyModeEternalParallel:`Éternel Parallèle — flotte multi-agents`,autoProceedDelayLabel:`Délai d'avance automatique`,autoProceedDelayHint:`Millisecondes avant que l'agent avance automatiquement en mode Auto. 0 = immédiat.`,yoloLabel:`Mode YOLO`,yoloHint:`Executer les appels d'outils sans demander, sauf les types de degats listes ci-dessous.`,yoloConfirmHeading:`Demander quand meme pour`,yoloConfirmIntro:`YOLO execute tout le reste sans surveillance. Voici les types de degats devant lesquels il s'arrete et vous demande.`,yoloConfirmLockedNote:`Ces deux-la demandent toujours. Ils ecrivent les fichiers qui decident si on vous demande quoi que ce soit - les desactiver laisserait l'agent couper son propre systeme d'approbation.`,yoloKindLocked:`demande toujours`,yoloKind:{"disk-wipe":{label:`Effacer un disque`,hint:`mkfs, dd vers un peripherique brut, format C:, fork bomb`},"system-halt":{label:`Eteindre ou redemarrer`,hint:`shutdown, reboot`},"delete-outside":{label:`Supprimer hors du projet`,hint:`suppression recursive forcee qui sort du projet ou atteint une racine systeme ou home`},"git-history":{label:`Reecrire l'historique git`,hint:`reset --hard, clean -f, push --force, filter-branch`},publish:{label:`Publier ou deployer`,hint:`npm publish, docker push, kubectl delete namespace`},"download-and-run":{label:`Executer du code telecharge`,hint:`curl | sh et charges en ligne qui telechargent puis executent`},"bulk-delete":{label:`Supprimer en masse`,hint:`find -exec rm, rmSync en ligne sur de nombreux chemins`},"agent-state":{label:`Ecrire l'etat propre de WrongStack`,hint:`config.json, trust.json, auth.json`},"credential-bind":{label:`Lier une cle API a un endpoint`,hint:`rattacher une cle connue a une URL de fournisseur`}},refineHeading:`Affinage du prompt`,enableRefineLabel:`Activer l'affinage`,enableRefineHint:`Réécrire les prompts avant l'envoi — instructions plus claires, meilleurs résultats.`,refineDelayLabel:`Délai d'affinage`,refineDelayHint:`Compte à rebours avant l'envoi automatique du prompt affiné.`,refineLanguageLabel:`Langue d'affinage`,refineLanguageHint:`Conserver votre langue ou traduire en anglais pour le modèle.`,refineLanguageOriginal:`Original — conserver votre langue`,refineLanguageEnglish:`Anglais — traduire en anglais`,refinerProviderLabel:`Fournisseur d'affinage`,refinerProviderHint:`Id du fournisseur pour l'affinage d'objectif. Vide = fournisseur de la session.`,refinerProviderDefault:`Fournisseur de la session`,refinerModelLabel:`Modèle d'affinage`,refinerModelHint:`Id du modèle pour l'affinage d'objectif. Vide = modèle de la session.`,refinerModelDefault:`Modèle de la session`,refinerProfileLabel:`Profil de fallback de l'affinage`,refinerProfileHint:`Profil de fallback nommé pour l'affinage d'objectif. Remplace le fournisseur et le modèle.`,refinerProfileDefault:`Aucun — utiliser le fournisseur et le modèle ou les valeurs par défaut de la session`,reasoningHeading:`Raisonnement & Cache`,reasoningModeLabel:`Mode de raisonnement`,reasoningModeHint:`Contrôler comment le modèle utilise la pensée étendue. Auto = valeur du fournisseur.`,reasoningModeAuto:`Auto — valeur du fournisseur`,reasoningModeOn:`Activé — forcer la pensée`,reasoningModeOff:`Désactivé — désactiver la pensée`,reasoningEffortLabel:`Effort de raisonnement`,reasoningEffortAuto:`Auto (général)`,reasoningEffortAutoHint:`Réglage général : {{value}}`,reasoningEffortHint:`Quantité de calcul que le modèle consacre à la pensée. Envoyé seulement si le modèle le supporte.`,reasoningEffortNone:`Aucun`,reasoningEffortMinimal:`Minimal`,reasoningEffortLow:`Faible`,reasoningEffortMedium:`Moyen`,reasoningEffortHigh:`Élevé`,reasoningEffortXhigh:`Très élevé`,reasoningEffortMax:`Max`,preserveThinkingLabel:`Préserver la pensée`,preserveThinkingHint:`Conserver les blocs de raisonnement entre les tours pour la continuité du contexte.`,cacheTtlLabel:`TTL du cache`,cacheTtlHint:`Durée de vie du cache de prompt. 1h coûte plus à l'écriture mais économise en relectures (Anthropic).`,cacheTtlDefault:`Par défaut — valeur du fournisseur`,cacheTtl5m:`5 minutes`,cacheTtl1h:`1 heure`,capsHint:`Utilisez wstack models caps pour vérifier ce que le modèle actuel supporte. Les réglages non supportés sont omis silencieusement par requête.`,routingHeading:`Routage de modèle`,routingRouteKey:`Clé de route de modèle`,routingPhasesGroup:`Phases`,routingRolesGroup:`Rôles {{label}}`,routingCustomGroup:`Routes personnalisées existantes`,routingTargetAria:`Cible de la route de modèle`,routingTargetEmpty:`— Effacer la route —`,routingTargetProfilesGroup:`Profils de fallback`,routingTargetModelsGroup:`Modèles (fournisseur/modèle)`,routingSet:`Définir`,routingReasoningModeAria:`Mode de raisonnement nouvelle route`,routingReasoningEffortAria:`Effort de raisonnement nouvelle route`,routingReasoningPreserveAria:`Préservation raisonnement nouvelle route`,routingReasoningModeFor:`Mode de raisonnement pour {{key}}`,routingReasoningEffortFor:`Effort de raisonnement pour {{key}}`,routingReasoningPreserveFor:`Préservation raisonnement pour {{key}}`,noRoutes:`Aucune route de modèle pour l'instant.`,leaderModel:`modèle leader`,autonomyDelayMsLabel:`Délai de reprise automatique`,autonomyDelayMsHint:`Millisecondes avant que l'agent reprenne automatiquement en mode Auto. 0 = immédiat.`,refineCountdownLabel:`Compte à rebours d'affinage`,refineCountdownHint:`Délai de grâce avant l'envoi automatique du prompt affiné (millisecondes).`,reasoningEffortModelSet:`niveaux du modèle actif`,reasoningEffortUnsupported:`Non proposé par ce modèle (pris en charge : {{levels}}) — le réglage sera omis.`},f={heading:`Exécution`,maxIterationsLabel:`Itérations max par run`,maxIterationsHint:`Plafond strict de tours LLM par agent.run().`,autoProceedMaxIterationsLabel:`Itérations max d'avance auto`,autoProceedMaxIterationsHint:`Arrêter l'avance auto après N itérations. 0 = illimité.`,confirmExitLabel:`Confirmer avant de quitter`,confirmExitHint:`Premier Ctrl+C annule le travail, second confirme la sortie.`,chimeLabel:`Carillon à la fin`,chimeHint:`Cloche du terminal quand un run d'agent se termine.`,breakerLabel:`Disjoncteur de processus`,breakerHint:`Bloque bash/exec après des échecs répétés ; le déclenchement arme le compte à rebours kill/reset.`,breakerTimeoutLabel:`Délai kill/reset du disjoncteur`,breakerTimeoutHint:`Délai avant le kill/reset automatique après déclenchement. 0 = récupération manuelle.`,availabilityHeading:`Provider/model availability calendar`,availabilityHint:`Prevent autonomous and overnight runs from using selected providers or models during recurring windows.`},p={heading:`Modèles fallback / round-robin`,body:`Quand le modèle actif est rate-limité (429/529), en erreur 5xx ou bloqué — après ses propres retries — l'agent passe au modèle suivant de cette chaîne. Aussi utilisé par défaut pour les sous-agents workers SDD.`,autoFallbackLabel:`Fallback auto`,autoFallbackHint:`Quand la chaîne ci-dessus est vide, en dériver une automatiquement depuis vos fournisseurs clés.`,favoritesOnlyLabel:`Favoris uniquement`,favoritesOnlyHint:`Quand le fallback auto dérive une chaîne, la restreindre à vos modèles favoris.`,profilesHeading:`Profils fallback / round-robin`,addProfile:`Ajouter`,noProfiles:`Aucun profil de fallback nommé pour l'instant.`,createDefault:`Créer le défaut depuis le modèle actif`,useChain:`Utiliser la chaîne`,setLeader:`Définir le leader`,profileEmpty:`Le profil est vide.`,favoritesHeading:`Modèles favoris`,favoritesEmpty:`Les favoris sont affichés en premier et peuvent contraindre le fallback auto.`,addModelToProfile:`Ajouter un modèle au profil…`,addFavoriteModel:`Ajouter un modèle favori…`,inactive:`inactif`},m={heading:`Flotte & Streaming`,fleetChatVerbosityLabel:`Streamer les événements de flotte`,fleetChatVerbosityHint:`Afficher l'activité live des sous-agents dans le panneau de flotte.`,maxConcurrentLabel:`Sous-agents simultanés max`,maxConcurrentHint:`Nombre maximum de sous-agents pouvant tourner simultanément.`,nextPredictionLabel:`Prédiction des prochaines étapes`,nextPredictionHint:`Après un tour, prédire les prochaines étapes probables.`,nextStepsToolLabel:`Outil nextsteps`,nextStepsToolHint:`Permet à l'agent d'enregistrer ses suggestions via un appel d'outil au lieu d'écrire le bloc à la main. Effectif à la prochaine session.`},h={hqHeading:`Client HQ`,hqPublishingLabel:`Publication HQ`,hqPublishingHint:`Publier cette session WebUI/client vers WrongStack HQ. Les clients de même machine peuvent auto-découvrir l'auth HQ locale ; les clients distants utilisent l'URL/token ci-dessous.`,hqUrlLabel:`URL HQ`,hqUrlHint:`Laisser vide pour l'auto-découverte sur même machine.`,hqTokenLabel:`Token client HQ`,hqRawContentLabel:`Contenu HQ brut`,hqRawContentHint:`Envoyer des aperçus de contenu bruts à HQ au lieu d'aperçus caviardés.`,wrongProxyHeading:`WrongProxy / WrongTrace`,wrongProxyEnabledLabel:`Router les URL de base via le proxy local`,wrongProxyEnabledHint:`Lorsqu'il est activé, l'URL de base de chaque fournisseur est réécrite via le proxy configuré (par défaut http://localhost:3444/proxy/<host><path>). openai-codex est exclu : il communique directement avec le backend ChatGPT avec un jeton OAuth.`,wrongProxyUrlLabel:`URL du proxy`,wrongProxyUrlHint:`Où écoute le daemon proxy local. Le système interroge périodiquement <url>/api/health ; un daemon injoignable désactive la réécriture sans réessayer à chaque frappe.`,wrongProxyChangesApply:`Les modifications s'appliquent immédiatement aux requêtes suivantes — aucun redémarrage requis.`,telegramHeading:`Notifications Telegram`,telegramSessionEndLabel:`Fin de session`,telegramSessionEndHint:`Envoyer un résumé quand une session se termine.`,telegramDelegateLabel:`Délégué terminé`,telegramDelegateHint:`Envoyer une note humanisée quand un sous-agent termine.`,telegramLongToolLabel:`Outils longs`,telegramLongToolHint:`Notifier quand un outil dépasse {{ms}}ms. 0 pour désactiver.`,telegramChangesApply:`Les changements s'appliquent immédiatement.`,telegramNotConfigured:`Telegram n'est pas configuré. Lancez /telegram-setup dans la CLI pour connecter un bot d'abord.`,heading:`Integrations`,disabledHint:`Activez la fonctionnalité dans l'onglet Contexte pour utiliser cette section.`},g={chimeraDedicatedHeading:`Chimera — Post-session Code Review`,chimeraDedicatedHint:`Automated code quality review that runs after every agent session. Catches regressions, anti-patterns, and potential bugs.`,chimeraSectionEnabled:`Post-session review (Chimera)`,chimeraSectionEnabledHint:`Run a code review agent after every iteration.`,chimeraProviderLabel:`Chimera provider`,chimeraProviderHint:`Provider for the review agent. Select one from your configured providers.`,chimeraProviderSessionDefault:`Session default`,chimeraModelLabel:`Model`,chimeraModelSessionDefault:`Session default`,chimeraModelHint:`Model for the review agent. Requires a provider first.`,chimeraMaxFilesLabel:`Max files per review`,chimeraMaxFilesHint:`Maximum number of changed files included in a single review call.`,chimeraAutoFixLabel:`Auto-fix mode`,chimeraAutoFixHint:`Whether the review agent should automatically apply fixes for issues it finds.`,chimeraAutoFixOff:`Off — review only`,chimeraAutoFixAsk:`Ask — confirm before applying`,chimeraAutoFixAuto:`Auto — apply without confirmation`,autoReviewCascadeOnLabel:`Cascade à partir de`,autoReviewCascadeOnHint:`Quand une revue détecte des problèmes à ce niveau de sévérité ou plus, lancer des agents de suivi.`,autoReviewCascadeOnOff:`Désactivé`,autoReviewCascadeOnHigh:`Haute ou plus`,autoReviewCascadeOnCritical:`Critique uniquement`,chimeraPickModel:`Pick provider/model for Chimera`,chimeraPickModelHint:`Select a provider and model for post-session code review.`,autoReviewSectionEnabled:`Mid-session review (Auto-Review)`,autoReviewSectionEnabledHint:`Run a review agent mid-session on every file change.`,autoReviewFallbackProfileLabel:`Profil fallback / round-robin`,autoReviewFallbackProfileHint:`Profil de modèles pour l’auto-review ; fournit le pool de fallback et les modèles pour round-robin ou sélection aléatoire.`,autoReviewFallbackProfileNone:`None — use provider+model or session defaults`,autoReviewModelSelectionLabel:`Sélection du profil`,autoReviewModelSelectionHint:`Choisit le modèle suivant dans l’ordre ou un modèle de départ aléatoire pour chaque revue.`,autoReviewModelSelectionRoundRobin:`Round-robin — ordre du profil`,autoReviewModelSelectionRandom:`Aléatoire — choisir dans le profil`,autoReviewFallbackModelsLabel:`Modèles fallback / round-robin`,autoReviewFallbackModelsEmpty:`Aucun modèle fallback / round-robin configuré`,autoReviewFallbackModelsHint:`Modèles du profil ou de la chaîne globale ; ils forment le pool de sélection et la chaîne de nouvelle tentative.`,autoReviewModelLabel:`Model`,autoReviewModelHint:`Model for the auto-review agent. Requires a provider first.`,autoReviewDebounceLabel:`Debounce interval (ms)`,autoReviewDebounceHint:`Minimum gap between review triggers after a file change.`,autoReviewMaxFilesLabel:`Max files per batch`,autoReviewMaxFilesHint:`Files per auto-review call.`,autoReviewMaxConcurrentLabel:`Max concurrent reviews`,autoReviewMaxConcurrentHint:`Parallel review subagent cap.`,autoReviewCascadeLabel:`Cascade on`,autoReviewCascadeHint:`Follow-up agent threshold — spawns security-scanner and bug-hunter above this severity.`,autoReviewCascadeOff:`Off — no cascade`,autoReviewCascadeCritical:`Critical — only critical findings`,autoReviewCascadeHigh:`High — critical or high findings`,autoReviewPickModel:`Pick provider/model for Auto-Review`,autoReviewPickModelHint:`Select a provider and model, or a named fallback profile, for mid-session auto-review.`,pluginsPerPluginHint:`Enable or disable individual plugins. Changes take effect on next session.`},_={flagsHeading:`Indicateurs de fonctionnalités`,mcpLabel:`Serveurs MCP`,mcpHint:`Activer les intégrations Model Context Protocol.`,pluginsLabel:`Plugins`,pluginsHint:`Charger et exécuter les plugins installés par l'utilisateur.`,memoryLabel:`Mémoire`,memoryHint:`Persister et rappeler des faits entre les sessions.`,skillsLabel:`Compétences`,skillsHint:`Charger les prompts de compétences spécifiques au domaine.`,modelsRegistryLabel:`Registre des modèles`,modelsRegistryHint:`Utiliser le catalogue models.dev pour la découverte des fournisseurs.`,indexOnStartLabel:`Indexer au démarrage`,indexOnStartHint:`Construire l'index des symboles du codebase au démarrage de la session.`,pluginsPerPluginHeading:`🔌 Per-Plugin Controls`,pluginsPerPluginHint:`Enable or disable individual plugins. Changes take effect on next session.`,pluginChimera:`Chimera — post-session code review`,pluginSkills:`Skills — skill library & authoring`,pluginPrompts:`Prompts — prompt library & gen`,pluginCostTracker:`Cost Tracker — token & cost tracking`,pluginTelegram:`Telegram — notification bot`,pluginKnowledgeGraph:`Knowledge Graph — persistent facts`,pluginErrorLens:`Error Lens — failure diagnostics`,pluginTodoTracker:`Todo Tracker — persistent todos`,pluginSecretScanner:`Secret Scanner — credential detection`,pluginLintGate:`Lint Gate — lint before iteration`,pluginDiffSummary:`Diff Summary — compact diffs`,pluginDepGuard:`Dep Guard — dependency rules`,pluginTypeGate:`Type Gate — typecheck before iteration`,pluginInjectionShield:`Injection Shield — prompt injection`,pluginPromptFirewall:`Prompt Firewall — input filtering`,pluginTokenBudget:`Token Budget — token limits`,pluginLoopBreaker:`Loop Breaker — runaway detection`,heading:`Contexte & Débogage`,autoCompactLabel:`Compacter le contexte auto`,autoCompactHint:`Réduire automatiquement la fenêtre de contexte près des limites.`,compactorStrategyLabel:`Stratégie de compactage`,compactorStrategyHint:`Comment le contexte est compacté quand il devient trop grand.`,compactorStrategyHybrid:`Hybride — règles rapides (défaut)`,compactorStrategyIntelligent:`Intelligent — résumé LLM`,compactorStrategySelective:`Sélectif — sélection pilotée par LLM`,contextModeLabel:`Mode de contexte`,contextModeHint:`Politique de fenêtre de contexte — équilibré par défaut.`,contextModeBalanced:`Équilibré — usage normal du contexte`,contextModeFrugal:`Frugal — usage conservateur de tokens`,contextModeDeep:`Profond — contexte plus large pour tâches complexes`,tokenSavingLabel:`Mode d'économie de tokens`,tokenSavingHint:`Contrôle les schémas directs et le prompt système de la prochaine session.`,tokenSavingAuto:`Auto — adapter le prompt à la fenêtre du modèle`,tokenSavingOff:`Désactivé — aucune économie`,tokenSavingMinimal:`Minimal — optimisation de base`,tokenSavingLight:`Léger — réduction modérée`,tokenSavingMedium:`Moyen — économies significatives`,tokenSavingAggressive:`Agressif — surface directe et prompt minimaux`},v={logLevelLabel:`Niveau de log`,logLevelHint:`Sévérité minimale pour le logging côté serveur.`,logLevelDebug:`Debug — tout`,logLevelInfo:`Info — flux normal`,logLevelWarn:`Warn — problèmes uniquement`,logLevelError:`Error — échecs uniquement`,auditLevelLabel:`Niveau d'audit`,auditLevelHint:`Niveau de détail pour les logs d'audit de session.`,auditLevelMinimal:`Minimal — erreurs uniquement`,auditLevelStandard:`Standard — appels d'outils + erreurs`,auditLevelFull:`Complet — chaque événement (logs volumineux)`,fsAccessLabel:`Accès au système de fichiers`,fsAccessHint:`Portée des outils de fichiers. Appliqué à la prochaine session.`,fsAccessUnrestricted:`Illimité — tout chemin`,fsAccessProject:`Projet — limité à la racine du projet`,debugStreamLabel:`Flux de débogage`,debugStreamHint:`Dump hexadécimal SSE brut vers stderr du serveur pour déboguer les fournisseurs.`,heading:`Logs & Debug`},y={heading:`Security & Monitoring`,brainHeading:`🧠 Brain — Contrôle des décisions`,brainHint:`Modèles de décision, conseil, escalade et plafond de risque — appliqués immédiatement, enregistrés dans la configuration globale.`,shadowHeading:`👁 Agent fantôme — Moniteur de flotte`,shadowHint:`L'agent fantôme surveille tous les agents de la flotte, suit leurs tâches et détecte les anomalies.`,toolsHeading:`🔧 Tool Access Control`,toolsHint:`Activez ou désactivez chaque outil. Les outils modifiants sont signalés en ambre.`,breakerHeading:`Process Circuit Breaker`,breakerHint:`Bloquer bash/exec après des échecs répétés ; un déclenchement arme le compte à rebours d'arrêt/réinitialisation.`},b={switchingTo:`Basculement vers {{provider}} / {{model}}…`,switching:`Changement de modèle…`,switchingToTarget:`Basculement vers {{target}}…`,previousModel:`modèle précédent`,modelSwitchedNextRequest:`Modèle changé : {{from}} → {{to}}. Actif pour la prochaine requête LLM.`,modelSwitchedRunActive:`Modèle changé : {{from}} → {{to}}. Actif pour la prochaine requête LLM ; l’exécution actuelle continue sans redémarrer.`,fallbackExists:`Le profil de fallback « {{name}} » existe déjà`,selectProviderModelFirst:`Sélectionnez d'abord un fournisseur et un modèle`,defaultProfileCreated:`Profil de fallback par défaut créé`,profileEmpty:`Le profil de fallback « {{name}} » est vide`,leaderSetFrom:`Leader défini depuis {{name}}`,modelSwitchTimeout:`Le changement de modèle a expiré. Veuillez réessayer.`},x={workbenchHeading:`Apparence du workbench`,workbenchHint:`Afficher ou masquer les surfaces du workbench dans la vue de chat.`,showModelReasoningLabel:`Afficher le raisonnement du modèle`,showModelReasoningHint:`Affiche les blocs de raisonnement/thinking du LLM dans l’historique du chat (parité TUI).`,showAgentSwarmPanelLabel:`Panneau agent swarm`,showAgentSwarmPanelHint:`Contrôle l'emplacement du panneau agent swarm (fleet + file de missions).`,swarmPanelBottom:`Panneau inférieur`,swarmPanelSidebar:`Barre latérale droite`,swarmPanelOff:`Désactivé`,titleAnimationLabel:`Animation du titre`,titleAnimationHint:`Animer le titre du terminal/onglet avec l'état d'exécution (parité TUI).`,keyboardShortcutsLabel:`Raccourcis clavier`,keyboardShortcutsHint:`Activer les raccourcis clavier globaux (Ctrl+K, Alt+1..4, etc.). Désactivé par défaut.`,statusChipHeading:`Puce d’état et ligne d’état`,statusChipHint:`Style visuel pour la ligne d’état TUI/CLI et la puce de travail.`,thinkingWordLabel:`Mot de réflexion`,thinkingWordHint:`Mot court unique affiché dans la puce d’état TUI pendant que l’agent travaille.`,statuslineModeLabel:`Mode ligne d’état`,statuslineModeHint:`Densité de la barre d’état TUI.`,statuslineModeMinimum:`Minimum`,statuslineModeDetailed:`Détaillé`,statuslineModeNoColor:`Sans couleur`,animationStyleLabel:`Style d’animation`,animationStyleHint:`Animation de la puce de travail TUI.`,animationStyleRainbow:`Arc-en-ciel`,animationStyleWave:`Vague`,animationStylePulse:`Pulsation`,animationStyleDots:`Points`,animationStyleBreathe:`Respiration`,animationStyleStatic:`Statique`,animationStyleCycle:`Cycle`,refineHeading:`Compte à rebours du refine et diffs`,refineHint:`Configurer le compte à rebours préalable au refine et le seuil du pied de résumé multi-diff.`,preRefineSecondsLabel:`Compte à rebours pré-refine`,preRefineSecondsHint:`Délai de grâce avant le démarrage du refiner (secondes). 0 = sauter le compte à rebours et raffiner immédiatement.`,preRefineSecondsPresets:`Préréglages : {{presets}} secondes (0 = désactivé).`,multiDiffSummaryLabel:`Résumé multi-diff`,multiDiffSummaryHint:`Nombre minimum de fichiers avant l'affichage du pied agrégé « N fichiers · +X -Y » au-dessus des blocs par fichier.`,multiDiffSummaryPresets:`Préréglages : {{presets}} (0 = désactivé).`,memoryHeading:`Outil read et injection de mémoire SAGE`,memoryHint:`Active ce que l’outil read inclut et quand les blocs mémoire SAGE apparaissent dans les résultats d’outil.`,readSymbolsLabel:`Lire les symboles`,readSymbolsHint:`Lorsqu’activé, l’outil read inclut les symboles de l’index de code avec le contenu du fichier.`,showSageMemoryInjectLabel:`Afficher SAGE Memory Inject`,showSageMemoryInjectHint:`Lorsqu’activé, affiche les blocs d’injection de mémoire SAGE dans les résultats d’outil.`,sageMemoryInjectThresholdLabel:`Seuil de SAGE Memory Inject`,sageMemoryInjectThresholdHint:`Force de relation minimale requise pour une mémoire SAGE injectée (0.72–0.95).`,footnote:`Ces paramètres reflètent le picker /settings du TUI. Les bascules s’appliquent en direct ; certains champs nécessitent un redémarrage de session.`,sageRelaxed:`0,72 (souple)`,sageDefault:`0,85 (par défaut)`,sageStrict:`0,95 (strict)`},S=`Réinitialiser`,C=`Annuler`,w=`Réinitialiser toutes les préférences ?`,T=`Cela restaure les paramètres par défaut et recharge la page.`,E=`Réinitialiser`,D=JSON.parse(`{"heading":"Brain","headingHint":"Modèles de décision, conseil, escalade et plafond de risque — appliqués en direct, enregistrés dans la configuration globale.","riskHeading":"Plafond d'autonomie","escalationHeading":"Escalade","escalationModeLabel":"Mode","escalationModeHint":"Headless : le Brain ne bloque jamais sur un humain — les escalades sans réponse sont résolues par la politique terminale sûre. S'applique aux sessions CLI/TUI ; le Brain WebUI autonome est toujours headless.","escalationDecisionTimeoutLabel":"Délai de décision","escalationDecisionTimeoutHint":"Budget de temps par appel LLM pour une décision du Brain.","escalationHumanTimeoutLabel":"Délai de réponse humaine","escalationHumanTimeoutHint":"Mode interactif : combien de temps un prompt d'escalade peut attendre avant que la politique terminale ne le résolve.","escalationTerminalPolicyLabel":"Politique terminale","escalationTerminalPolicyHint":"Comment une escalade headless se résout sans humain disponible. Conservateur accepte une option recommandée à risque faible/moyen ; tout-refuser n'accepte jamais automatiquement ; continuer-sur-recommandation accepte une option recommandée à TOUT risque.","escalationDecisionLogSizeLabel":"Taille du journal de décision","escalationDecisionLogSizeHint":"Journal de décision en mémoire rotatif conservé pour la vue d'état.","rulesHeading":"Règles déterministes","rulesConfigured":"{{count}} configurée(s)","rulesBody":"Évaluées avant tout appel fournisseur — la première correspondance gagne. Modifiez-les dans le fichier de configuration globale ; cette vue est en lecture seule.","rulesOff":"désactivée","rulesDropped":"{{count}} règle(s) abandonnée(s)","heuristicsHeading":"Heuristiques","heuristicsBody":"Hypothèses de motifs gratuites qui tranchent une question avant qu'un modèle ne s'exécute. Toutes activées par défaut — désactivez celle dont l'hypothèse est fausse pour votre charge de travail.","heuristicsLowRiskLabel":"Réponse auto à faible risque","heuristicsLowRiskHint":"Répond automatiquement aux demandes à faible risque qui portent déjà une option recommandée.","heuristicsBlockedLabel":"Bloqué-résolu","heuristicsBlockedHint":"'blocked …' plus un marqueur de résolution explicite dans le contexte résout en continuer.","heuristicsDeadlockLabel":"Ignorer l'impasse","heuristicsDeadlockHint":"'deadlock' plus des unités de travail en échec dans le contexte résout en ignorer et continuer.","heuristicsRetryLabel":"Nouvelles tentatives épuisées","heuristicsRetryHint":"'failed'/'retry' plus des nouvelles tentatives manifestement épuisées marque l'unité en échec et passe à la suite.","heuristicsPingLabel":"Ping de continuation","heuristicsPingHint":"Un simple ping continuer/procéder sans alternative concurrente résout en continuer.","heuristicsMarkers":"Marqueurs : {{markers}}","qualityHeading":"Qualité LLM","qualityCircuit_one":"circuit {{state}} · {{count}} échec","qualityCircuit_other":"circuit {{state}} · {{count}} échecs","qualityResponseBudgetLabel":"Budget de réponse","qualityResponseBudgetHint":"Jetons de sortie par appel de décision. Une réponse du Brain est une décision plus une justification d'une phrase.","qualityRejectLabel":"Rejeter les réponses incertaines","qualityRejectHint":"Traite une réponse refusée ou vide comme « ce niveau n'a pas pu décider » au lieu de l'accepter comme réponse.","qualityMinConfidenceLabel":"Confiance minimale","qualityMinConfidenceHint":"Rejette les réponses dont la confiance auto-déclarée est inférieure. Les réponses sans confiance déclarée passent toujours.","qualityDenyTerminalLabel":"Le refus est terminal","qualityDenyTerminalHint":"Si un refus du niveau LLM unique termine la décision. 'when-decided' rend un vrai refus terminal tandis que les pannes d'infrastructure escaladent toujours.","traceHeading":"Trace de rejeu","traceRecordLabel":"Enregistrer les traces de décision","traceRecordHint":"JSONL par décision de chaque niveau, cible de pool et vote du conseil, avec temps et utilisation de jetons. Désactivé par défaut — l'activer écrit le contenu des décisions sur disque.","traceContentLabel":"Contenu de la trace","traceContentHint":"'full' conserve la question et le contexte (nécessaire pour rejouer une décision) ; 'redacted' tronque le texte libre ; 'none' n'enregistre que les métadonnées.","cacheHeading":"Cache de décision","cacheStats":"{{hits}} succès / {{misses}} échec · {{size}} actif","cacheReplayLabel":"Rejouer les verdicts identiques","cacheReplayHint":"Réutilise un verdict conseil/LLM précédent pour une question identique répétée. Les niveaux déterministes et demander-un-humain ne sont jamais mis en cache ; une décision que le journal observe en échec est expulsée.","cacheLifetimeLabel":"Durée de vie des entrées","cacheLifetimeHint":"Combien de temps un verdict en cache reste rejouable.","cacheMaxEntriesLabel":"Entrées maximales","cacheMaxEntriesHint":"Plafond des verdicts en cache actifs.","monitorHeading":"Moniteur","monitorBody":"Auto-activation par signaux de détresse. Le moniteur est construit une fois au démarrage, donc ces réglages s'appliquent à la prochaine session plutôt qu'en direct.","monitorWatchLabel":"Surveiller les signaux de détresse","monitorWatchHint":"Les séries d'échecs d'outils, les tempêtes d'erreurs, les blocages d'agents et le churn de fichiers activent le Brain seuls.","monitorPolicyLabel":"Politique de signal","monitorPolicyHint":"Comment un signal détecté se résout. 'llm' consulte le Brain ; 'steer' intervient toujours et 'observe' jamais — les deux sans appel fournisseur.","modelsHeading":"Modèles de décision","modelsSessionBadge":"modèle de session","modelsResolvedBadge":"{{resolved}}/{{total}} résolus","modelsUseSessionLabel":"Utiliser le modèle de session","modelsUseSessionHint":"Décider avec le modèle que la session exécute. Désactiver en ajoutant des modèles ci-dessous.","modelsAddModel":"Ajouter un modèle","modelsPoolStrategyLabel":"Stratégie de pool","modelsPoolStrategyHint":"Repli : le premier modèle est principal, les autres sont essayés dans l'ordre en cas d'échec. Round-robin : les décisions tournent dans le pool.","councilHeading":"Conseil","councilConvened":"convoqué","councilDisabled":"désactivé","councilEnableLabel":"Activer le conseil multi-LLM","councilEnableHint":"Les questions à enjeu élevé sont votées par des sièges indépendants (exécuteur / sceptique-avec-veto / auditeur) au lieu d'un seul modèle. Nécessite ≥2 votants résolvables (sièges explicites ci-dessous, ou un pool de ≥2 modèles).","councilSeatsDerived":"Sièges dérivés du pool : {{seats}}","councilCustomLens":"Lentille de décision personnalisée — envoyée telle quelle au siège.","councilCustomOption":"{{persona}} (personnalisé)","councilVeto":"veto","councilAddVoter":"Ajouter un votant","councilRiskFloorLabel":"Plancher de risque","councilRiskFloorHint":"Risque minimum de question qui convoque le conseil au lieu du niveau mono-modèle.","councilJudge":"Juge","councilJudgeDesc":"Modèle de départage qui voit la justification de chaque vote.","councilResolved":"résolu : {{model}}","councilAlsoVoter":"⚠ aussi un votant","councilAuto":"auto","councilPick":"Choisir…","councilAutoReset":"Auto","councilQuorumLabel":"Quorum","councilQuorumHint":"Fraction des sièges devant renvoyer un vote valide.","councilApprovalLabel":"Approbation","councilApprovalHint":"Fraction du poids des votes exprimés que l'option gagnante doit dépasser.","councilPerSeatTimeoutLabel":"Délai par siège","councilPerSeatTimeoutHint":"Budget de temps pour le vote d'un seul siège. Plus lent que le délai de décision signifie qu'un siège bloqué retient le vote.","councilMaxConcurrencyLabel":"Concurrence maximale","councilMaxConcurrencyHint":"Combien de sièges votent en parallèle. Réduisez quand le pool partage un fournisseur limité en débit.","councilDistinctnessLabel":"Distinction des sièges","councilDistinctnessHint":"Rejeter les sièges en double : 'model' exige des modèles distincts, 'provider' des fournisseurs indépendants pour qu'une panne ne puisse pas faire basculer le vote.","councilVoterBudgetLabel":"Budget de réponse du votant","councilVoterBudgetHint":"Jetons de sortie par appel de siège — les modèles de raisonnement dépensent leurs jetons de réflexion sur ce budget.","councilRoundsLabel":"Tours de délibération","councilRoundsHint":"Le tour 1 est indépendant. Aux tours suivants, chaque siège voit les votes des autres et peut réviser sa position. Seul le dernier tour est compté, et chaque tour coûte un appel de plus par siège.","councilJudgeBudgetLabel":"Budget de réponse du juge","councilJudgeBudgetHint":"Jetons de sortie pour l'appel du juge de départage.","councilSeatTemplate":"Modèle de siège :","ledgerHeading":"Journal de décision","ledgerRecordLabel":"Enregistrer les décisions + résultats","ledgerRecordHint":"Persiste chaque décision et son résultat observé ; les résultats passés similaires sont réinjectés dans les prompts futurs du Brain.","ledgerAutoDenyLabel":"Auto-refus après échecs","ledgerAutoDenyHint":"Refuser de manière déterministe (sans LLM) dès que ce nombre d'approbations consécutives d'un groupe de décisions s'est soldé par des échecs observés.","ledgerMemoryEntriesLabel":"Entrées en mémoire","ledgerMemoryEntriesHint":"Taille de l'anneau en mémoire et nombre d'entrées passées chargées du disque au démarrage.","ledgerRetryWindowLabel":"Fenêtre de nouvelle tentative d'intervention","ledgerRetryWindowHint":"Une intervention du moniteur de même nature qui se redéclenche dans cette fenêtre marque la précédente orientation comme un échec.","recentHeading":"Décisions récentes ({{count}})","recentEmpty":"Aucune décision enregistrée pour l'instant dans cette session.","optInteractive":"Interactif (me demander)","optHeadless":"Headless (ne jamais demander)","optConservative":"Conservateur (défaut)","optDenyAll":"Tout refuser","optContinueRecommended":"Continuer sur recommandation","optNeverDefault":"Jamais (défaut)","optWhenDecided":"Quand décidé","optAlways":"Toujours","optFullDefault":"Complet (défaut)","optRedacted":"Expurgé","optMetadataOnly":"Métadonnées uniquement","optConsultBrain":"Consulter le Brain (défaut)","optAlwaysSteer":"Toujours orienter","optObserveOnly":"Observer uniquement","optFallback":"Repli","optRoundRobin":"Round-robin","optMediumPlus":"Moyen+","optHighPlus":"Élevé+","optCriticalOnly":"Critique uniquement","optNoneDefault":"Aucun (défaut)","optDistinctModels":"Modèles distincts","optDistinctProviders":"Fournisseurs distincts","optDefault3":"Défaut (3)","optOff":"Désactivé","pickPoolTitle":"Ajouter un modèle de pool Brain","pickPoolHint":"Pool de décision ordonné — le premier est principal.","pickVoterTitle":"Ajouter un votant au conseil","pickVoterHint":"La boîte de dialogue reste ouverte — ajoutez ≥2 votants, puis fermez.","pickJudgeTitle":"Choisir le juge du conseil","pickJudgeHint":"Départage qui voit chaque vote.","persistError":"Paramètres appliqués en direct mais non enregistrés.","riskCopy":{"off":"Un humain décide de tout","low":"Décision auto pour faible risque uniquement","medium":"Décision auto jusqu'au risque moyen","high":"Décision auto jusqu'au risque élevé","all":"Décision auto pour tout"},"rulesConfigured_one":"{{count}} configurée","rulesConfigured_other":"{{count}} configurées"}`),O={default15s:`Par défaut (15 s)`,waitForever:`Attendre indéfiniment`,defaultHalf:`Par défaut (0,5)`,all:`Tous`,n200Default:`200 (par défaut)`,offDefault:`Désactivé (par défaut)`,n20Default:`20 (par défaut)`,m5Default:`5 min (par défaut)`,default:`Par défaut`,oneSerial:`1 (série)`,roundsOff:`1 (pas de délibération)`,default500:`Par défaut (500)`,default10m:`Par défaut (10 min)`},k={capToolCall:`Appel d'outil`,capReasoning:`Raisonnement`,capTemperature:`Température`,capAttachment:`Pièce jointe`,capStructuredOutput:`Sortie structurée`,capOpenWeights:`Poids ouverts`},A={presetsHeading:`Jeux de polices`,presetsHint:`Un jeu règle tous les rôles d’un coup ; les polices ne sont téléchargées qu’à la première utilisation.`,presets:{workbench:{label:`Atelier`,description:`L’apparence par défaut de l’atelier.`},plex:{label:`IBM Plex`,description:`Une seule famille technique de bout en bout.`},modern:{label:`Moderne`,description:`Inter neutre avec JetBrains Mono pour le code.`},geist:{label:`Geist`,description:`Un duo net Geist Sans et Mono.`},classic:{label:`Classique`,description:`Source Sans, Serif et Code Pro d’Adobe.`},editorial:{label:`Éditorial`,description:`Titres à empattements et police de chat façon livre.`},readable:{label:`Lisible`,description:`Des polices très lisibles pour les longues sessions.`},friendly:{label:`Convivial`,description:`Formes arrondies et détendues avec Fira Code.`},monospace:{label:`Chasse fixe`,description:`Chasse fixe partout, style terminal.`},system:{label:`Système`,description:`Polices du système, aucun téléchargement.`}},rolesHeading:`Polices par rôle`,rolesHint:`Remplacez n’importe quel rôle en plus du jeu. Les rôles marqués « Comme … » suivent leur rôle parent.`,roles:{ui:{label:`Interface et panneaux`,hint:`Boutons, menus, barres latérales, listes et réglages.`},display:{label:`Titres`,hint:`Titres de page et de section.`},reading:{label:`Chat et documents`,hint:`Réponses de l’assistant, markdown et messages de la boîte.`},code:{label:`Code en ligne et données`,hint:`Blocs de code, journaux, identifiants et données tabulaires.`},editor:{label:`Éditeur de code`,hint:`Éditeur de fichiers Monaco et vue des différences.`},terminal:{label:`Terminal`,hint:`Sessions de terminal intégrées.`}},fromPreset:`Jeu ({{name}})`,inherit:`Comme {{role}} ({{name}})`,categories:{sans:`Sans empattement`,serif:`Avec empattement`,mono:`Chasse fixe`},systemTag:`système`,sizeHeading:`Taille et espacement`,sizeHint:`La taille du texte de l’interface agrandit tous les panneaux ; les tailles de l’éditeur et du terminal sont en pixels.`,sizePresets:{compact:`Compact`,normal:`Normal`,comfortable:`Confortable`,large:`Grand`,custom:`Personnalisé`},controls:{uiScale:{label:`Taille du texte de l’interface`,hint:`Met à l’échelle le texte des panneaux, du chat et des dialogues.`},editorFontSize:{label:`Taille de police de l’éditeur`,hint:`Éditeur Monaco et vue des différences.`},codeLineHeight:{label:`Interligne du code`,hint:`Éditeur, vue des différences et blocs de code.`},terminalFontSize:{label:`Taille de police du terminal`,hint:`Terminal intégré.`},terminalLineHeight:{label:`Interligne du terminal`,hint:`Espacement des lignes du terminal.`},ligatures:{label:`Ligatures de code`,hint:`Fusionne => !== >= en un seul glyphe dans les polices compatibles (Fira Code, Cascadia, JetBrains Mono…). Non appliqué au terminal.`}},previewHeading:`Aperçu en direct`,preview:{heading:`Refactoriser le chargeur de session`,body:`L’agent a lu 12 fichiers et proposé une modification en deux étapes. Vérifiez les différences avant de l’appliquer.`,label:`Libellé d’interface`},resetAll:`Réinitialiser tous les réglages de police`,resetOverrides:`Effacer les remplacements par rôle`},j={title:e,subtitle:t,tabs:n,model:r,connection:i,provider:a,providerModels:o,mcp:s,allowlist:c,oauth:l,general:u,agent:d,execution:f,fallbacks:p,fleet:m,integrations:h,features:g,context:_,logs:v,security:y,toast:b,display:x,resetLabel:S,cancel:C,resetConfirmTitle:w,resetConfirmBody:T,resetConfirmAction:E,brain:D,brainOpt:O,modelSchema:k,fonts:A};export{d as agent,c as allowlist,D as brain,O as brainOpt,C as cancel,i as connection,_ as context,j as default,x as display,f as execution,p as fallbacks,g as features,m as fleet,A as fonts,u as general,h as integrations,v as logs,s as mcp,r as model,k as modelSchema,l as oauth,a as provider,o as providerModels,E as resetConfirmAction,T as resetConfirmBody,w as resetConfirmTitle,S as resetLabel,y as security,t as subtitle,n as tabs,e as title,b as toast};
@@ -1,7 +0,0 @@
1
- import{Dt as e,K as t,Nt as n,wt as r,zt as i}from"./config-store-xSv1mChc.js";import{_o as a,bo as o,vo as s,yo as c}from"./vendor-V3ydTHqN.js";import"./i18n--QdD6NCn.js";import"./mailbox-store-ZQO_Rv6E.js";import"./ui-store-DC3mkswy.js";import"./chat-store-C-PKlsCR.js";import"./codemap-activity-store-Ha7XbGgq.js";var l=`__bug_hunt_continuation_pending__`,u=s()(a((e,t)=>({runs:{},start:(t,n)=>e(e=>({runs:{...e.runs,[t]:n}})),ownsRequest:(e,n)=>{let r=t().runs[e];return!!(r&&n!==void 0&&r.requestId!==null&&r.requestId!==l&&r.requestId===n)},advance:(n,r)=>{let i=t().runs[n];if(!i||i.requestId===l||r!==void 0&&i.requestId!==null&&i.requestId!==r)return null;if(i.currentRound>=i.totalRounds)return t().clear(n),null;let a={...i,currentRound:i.currentRound+1,requestId:l};return e(e=>({runs:{...e.runs,[n]:a}})),a},setRequestId:(t,n)=>e(e=>{let r=e.runs[t];return!r||r.requestId!==l?e:{runs:{...e.runs,[t]:{...r,requestId:n}}}}),stop:(e,n)=>{let r=t().runs[e];!r||n&&r.requestId!==null&&r.requestId!==n||t().clear(e)},recover:(t,n)=>e(e=>({runs:{...e.runs,[t]:{...n,requestId:null}}})),clear:t=>e(e=>{let{[t]:n,...r}=e.runs;return{runs:r}})}),{name:`wrongstack-bug-hunt-runs`,partialize:e=>({runs:e.runs})})),d=8;function f(t,a={}){let s=Math.max(1,a.max??d),l=new Map,u=e=>e&&e.length>0?e:r,f=e=>{let n=u(e),r=l.get(n);if(r)return r;for(;l.size>=s;){let e=[...l.keys()].find(e=>e!==n);if(e===void 0)break;l.delete(e)}let i=o(t);return l.set(n,i),i},p=(e=>{let t=c(i,e=>e.activeSessionId);return c(f(t),e)});return p.getState=()=>f(e()).getState(),p.setState=t=>f(e()).setState(t),p.subscribe=t=>f(e()).subscribe(t),p.for=f,p.dropSession=e=>{l.delete(u(e))},p.sessionIds=()=>[...l.keys()],n(e=>p.dropSession(e)),p}function p(e,t){return t>=100?`danger`:`warning`}function m(e,t){switch(e){case`budget.threshold_reached`:{let e=t,n=e.limit>0?Math.round(e.used/e.limit*100):0;return`${e.subagentId} [${e.kind}] ${n}% (${e.used}/${e.limit})`}case`budget.decision`:{let e=t;return`${e.subagentId} [${e.kind}] → ${e.decision}`}case`consensus.vote_initiated`:{let e=t;return`Vote: "${e.title}" — ${e.eligible.length} voters`}case`consensus.vote_cast`:{let e=t;return`${e.voterId} voted ${e.value}`}case`consensus.vote_resolved`:{let e=t;return`${e.result} — ✅${e.approveCount} ❌${e.rejectCount}`}case`task.pending`:return`Task queued: "${t.description.slice(0,60)}"`;case`task.started`:{let e=t;return`${e.subagentId} started ${e.taskId}`}case`task.completed`:{let e=t;return`Task ${e.taskId} ${e.status} (${e.durationMs}ms)`}case`task.failed`:{let e=t;return`Task ${e.taskId} failed: ${e.error.slice(0,60)}`}case`subagent.budget_extended`:{let e=t;return`${e.subagentId} [${e.kind}] extended → ${e.extendedTo}ms`}default:return e}}var h=200,ee=50,g=300,_=200,v=100;function y(e,t,n){if(!(e.size<=t)){if(n)for(let[r,i]of e){if(e.size<=t)break;n(i)&&e.delete(r)}for(let n of e.keys()){if(e.size<=t)break;e.delete(n)}}}var b=f(e=>({coordinatorStatus:`idle`,subagents:new Map,events:[],consensusVotes:new Map,tasks:new Map,taskCounts:{pending:0,running:0,completed:0,failed:0},budgetAlerts:[],lastUpdated:Date.now(),setCoordinatorStatus:(t,n)=>e(e=>({coordinatorStatus:t,coordinatorMode:n,lastUpdated:Date.now()})),updateCoordinatorStats:t=>e(e=>{let n=new Map(e.subagents);for(let e of t.subagentStatuses??[]){let t=n.get(e.id);n.set(e.id,{id:e.id,name:e.name,role:t?.role??`agent`,status:e.status,currentTask:e.currentTask,budgetLimits:t?.budgetLimits,budgetUsage:t?.budgetUsage,lastSeen:t?.lastSeen??Date.now()})}return y(n,_,e=>e.status===`stopped`),{subagents:n,taskCounts:{pending:t.pending,running:t.inFlight,completed:t.completed,failed:0},lastUpdated:Date.now()}}),updateSubagentBudget:(t,n)=>e(e=>{let r=new Map(e.subagents),i=r.get(t);return r.set(t,{id:t,name:i?.name??t,role:i?.role??`agent`,status:i?.status??`idle`,...i,...n,lastSeen:Date.now()}),y(r,_,e=>e.status===`stopped`),{subagents:r,lastUpdated:Date.now()}}),pushEvent:(t,n,r,i,a)=>e(e=>{let o=n.kind??t,s=(t.includes(`budget`)||t.includes(`threshold`))&&typeof n.limit==`number`&&n.limit>0?Math.round(n.used/n.limit*100):void 0,c=s===void 0?t.includes(`consensus.vote_resolved`)?`info`:t.includes(`consensus.vote_initiated`)?`warning`:`info`:s>=100?`danger`:s>=85?`warning`:`info`;return{events:[{id:`${r}-${t}`,ts:r,type:t,subagentId:i,taskId:a,payload:n,kind:o,level:c,message:m(t,n)},...e.events].slice(0,h),lastUpdated:Date.now()}}),pushConsensusVote:(t,n,r)=>e(e=>{let i=new Map(e.consensusVotes);return i.set(t,{changeId:t,title:n,status:`pending`,eligible:r,votes:[],approveCount:0,rejectCount:0,abstainCount:0,expiresAt:Date.now()+3e5}),y(i,v,e=>e.status!==`pending`),{consensusVotes:i,lastUpdated:Date.now()}}),recordConsensusVote:(t,n,r,i)=>e(e=>{let a=new Map(e.consensusVotes),o=a.get(t);if(!o)return{};let s={...o,votes:[...o.votes.filter(e=>e.agentId!==n),{agentId:n,agentName:r,value:i,votedAt:Date.now()}],approveCount:i===`approve`?o.approveCount+1:o.approveCount,rejectCount:i===`reject`?o.rejectCount+1:o.rejectCount,abstainCount:i===`abstain`?o.abstainCount+1:o.abstainCount};return a.set(t,s),{consensusVotes:a,lastUpdated:Date.now()}}),resolveConsensusVote:(t,n,r,i)=>e(e=>{let a=new Map(e.consensusVotes),o=a.get(t);return o?(a.set(t,{...o,status:n,approveCount:r,rejectCount:i,resolvedAt:Date.now()}),{consensusVotes:a,lastUpdated:Date.now()}):{}}),pushTaskPending:(t,n,r)=>e(e=>{let i=new Map(e.tasks);return i.set(t,{id:t,description:n,status:`pending`,priority:r,queuedAt:Date.now()}),y(i,g,e=>e.status===`completed`||e.status===`failed`),{tasks:i,taskCounts:{...e.taskCounts,pending:e.taskCounts.pending+1},lastUpdated:Date.now()}}),startTask:(t,n)=>e(e=>{let r=new Map(e.tasks),i=r.get(t);return i?r.set(t,{...i,status:`running`,subagentId:n,startedAt:Date.now()}):r.set(t,{id:t,description:``,status:`running`,subagentId:n,startedAt:Date.now()}),{tasks:r,taskCounts:{...e.taskCounts,pending:Math.max(0,e.taskCounts.pending-1),running:e.taskCounts.running+1},lastUpdated:Date.now()}}),completeTask:(t,n,r)=>e(e=>{let i=new Map(e.tasks),a=i.get(t);return a&&i.set(t,{...a,status:n,completedAt:Date.now(),durationMs:r}),y(i,g,e=>e.status===`completed`||e.status===`failed`),{tasks:i,taskCounts:{...e.taskCounts,running:Math.max(0,e.taskCounts.running-1),completed:n===`completed`?e.taskCounts.completed+1:e.taskCounts.completed,failed:n===`failed`?e.taskCounts.failed+1:e.taskCounts.failed},lastUpdated:Date.now()}}),failTask:(t,n)=>e(e=>{let r=new Map(e.tasks),i=r.get(t);return i&&r.set(t,{...i,status:`failed`,error:n,completedAt:Date.now()}),y(r,g,e=>e.status===`completed`||e.status===`failed`),{tasks:r,taskCounts:{...e.taskCounts,running:Math.max(0,e.taskCounts.running-1),failed:e.taskCounts.failed+1},lastUpdated:Date.now()}}),recordBudgetDecision:(t,n,r,i)=>e(e=>{let a=new Map;for(let t of e.budgetAlerts){let e=`${t.subagentId}:${t.kind}`;a.has(e)||a.set(e,t)}let o=`${t}:${n}`,s=a.get(o);return s&&a.set(o,{...s,decision:r,newLimit:i,level:r===`extend`?`warning`:`danger`}),{budgetAlerts:Array.from(a.values()),lastUpdated:Date.now()}}),recordBudgetAlert:(t,n,r,i)=>e(e=>{let a=`${Date.now()}-${t}-${n}`,o=i>0?Math.round(r/i*100):0;return{budgetAlerts:[{id:a,ts:Date.now(),subagentId:t,kind:n,level:p(n,o),used:r,limit:i,pct:o},...e.budgetAlerts].slice(0,ee),lastUpdated:Date.now()}}),recordBudgetExtended:(t,n,r)=>e(e=>{let i=new Map(e.subagents),a=i.get(t);if(a?.budgetLimits){let e={...a.budgetLimits};n===`timeout`&&r&&(e.timeoutMs=r),n===`iterations`&&(e.maxIterations=r),n===`tool_calls`&&(e.maxToolCalls=r),i.set(t,{...a,budgetLimits:e,lastSeen:Date.now()})}return{subagents:i,lastUpdated:Date.now()}}),clear:()=>e({coordinatorStatus:`idle`,coordinatorMode:void 0,subagents:new Map,events:[],consensusVotes:new Map,tasks:new Map,taskCounts:{pending:0,running:0,completed:0,failed:0},budgetAlerts:[],lastUpdated:Date.now()})}),{max:4});function x(e,t){return{seatId:C(e.seatId)??`seat`,persona:C(e.persona)??`voter`,status:C(e.status)??`valid`,optionId:C(e.optionId),stance:C(e.stance),rationale:C(e.rationale),providerId:C(e.providerId),model:C(e.model),veto:T(e.veto),weight:w(e.weight),durationMs:w(e.durationMs),error:C(e.error),round:w(e.round),changed:T(e.changed),at:w(e.at)??t}}function te(e){if(e.phase===`voting`){let t=e.seats.reduce((e,t)=>Math.max(e,t.round??1),1);return`voting${t>1?` r${t}`:``} · ${e.seats.length} seat${e.seats.length===1?``:`s`} in`}let t=e.configuredSeatCount??e.seats.length,n=[e.resolution??e.status??`resolved`,`${e.validVoteCount??e.seats.length}/${t} seats`,`${e.distinctTargetCount??0} distinct target${e.distinctTargetCount===1?``:`s`}`];if(e.rounds!==void 0&&e.rounds>1){let t=e.deliberationChanges??0;n.push(`${e.rounds} rounds${t>0?`, ${t} changed`:`, none changed`}`)}return e.judgeUsed&&n.push(`judge${e.judgeLabel?` ${e.judgeLabel}`:``}`+(e.judgeIsVoter?` (also a voter)`:``)),e.durationMs!==void 0&&n.push(`${Math.round(e.durationMs/100)/10}s`),e.totalTokens&&n.push(`${e.totalTokens} tok`),n.join(` · `)}function S(e,t,n,r){let i=e.findIndex(e=>e.requestId===t);if(i>=0){let t=e[i],n=[...e];return n[i]=r(t),n}return[r({requestId:t,phase:`voting`,startedAt:n,seats:[]}),...e].slice(0,50)}var ne=f(e=>({panels:[],recordVote:t=>{let n=C(t.requestId);if(!n)return;let r=Date.now();e(e=>({panels:S(e.panels,n,r,e=>{let n=C(t.seatId)??`seat`,i=x(t,r);return e.seats.some(e=>e.seatId===n)?{...e,seats:e.seats.map(e=>e.seatId===n?i:e)}:e.phase===`resolved`?{requestId:e.requestId,phase:`voting`,startedAt:r,seats:[i],question:e.question}:{...e,seats:[...e.seats,i]}})}))},recordResolution:t=>{let n=C(t.requestId);if(!n)return;let r=Date.now(),i=t.usage;e(e=>({panels:S(e.panels,n,r,e=>({...e,phase:`resolved`,resolvedAt:w(t.at)??r,status:C(t.status),resolution:C(t.resolution),optionId:C(t.optionId),reason:C(t.reason),configuredSeatCount:w(t.configuredSeatCount),validVoteCount:w(t.validVoteCount),distinctTargetCount:w(t.distinctTargetCount),judgeUsed:T(t.judgeUsed),judgeLabel:C(t.judgeLabel),judgeIsVoter:T(t.judgeIsVoter),rounds:w(t.rounds),deliberationChanges:w(t.deliberationChanges),totalTokens:w(i?.totalTokens),durationMs:w(i?.durationMs),warnings:Array.isArray(t.warnings)?t.warnings.filter(e=>typeof e==`string`):void 0}))}))},noteQuestion:(t,n)=>{let r=n.trim();t&&r&&e(e=>{let n=e.panels.findIndex(e=>e.requestId===t);if(n<0)return e;let i=e.panels[n];if(i.question===r)return e;let a=[...e.panels];return a[n]={...i,question:r},{panels:a}})},clear:()=>e({panels:[]})}));function C(e){return typeof e==`string`&&e.trim()?e:void 0}function w(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}function T(e){return typeof e==`boolean`?e:void 0}var E=s()(e=>({snapshot:null,lastFiredAt:{},revision:0,setSnapshot:t=>e(e=>({snapshot:t,revision:e.revision+1})),recordFired:(t,n)=>e(e=>({lastFiredAt:{...e.lastFiredAt,[t]:n},revision:e.revision+1})),clear:()=>e({snapshot:null,lastFiredAt:{},revision:0})}));function D(){return`ref_${Date.now()}_${Math.random().toString(36).slice(2,8)}`}function O(e){switch(e.split(`.`).pop()?.toLowerCase()??``){case`ts`:case`tsx`:return`typescript`;case`js`:case`jsx`:return`javascript`;case`json`:return`json`;case`md`:case`mdx`:return`markdown`;case`css`:return`css`;case`scss`:return`scss`;case`html`:case`htm`:return`html`;case`py`:return`python`;case`rs`:return`rust`;case`go`:return`go`;case`rb`:return`ruby`;case`java`:return`java`;case`c`:return`c`;case`cpp`:case`hpp`:return`cpp`;case`h`:return`c`;case`sh`:case`bash`:return`bash`;case`sql`:return`sql`;case`yaml`:case`yml`:return`yaml`;case`toml`:return`toml`;default:return``}}function k(e,t=20,n=2e3){let r=e.split(`
2
- `),i=!1,a=e;return r.length>t&&(a=r.slice(0,t).join(`
3
- `),i=!0),a.length>n&&(a=a.slice(0,n),i=!0),i&&(a=a.replace(/\s+$/,``)+`
4
- …`),{text:a,truncated:i}}function A(e){return e.length===0?``:[`[File reference contract]`,`Before answering or modifying anything related to these references, use the available file-reading tools to read each complete project file:`,...e.map(e=>`- ${JSON.stringify(e)}`),`If a read is paginated or chunked, continue on the same path until EOF. Do not treat an inline preview as the complete file.`].join(`
5
- `)}function re(e,t){if(e.length===0)return``;let n=[],r=new Set;for(let i of e){if(i.kind===`file`){let e=t?.[i.path];if(e){let t=O(i.path),a=t?`\`\`\`${t}`:"```",o=k(e),s=o.truncated?`preview; complete read required`:`entire file`;n.push(`${a}\n// ${i.path} (${s})\n${o.text}\n\`\`\``),o.truncated&&r.add(i.path)}else n.push(`@${i.path}`),r.add(i.path);continue}let e=O(i.path),a=e?`\`\`\`${e}`:"```",o=`// ${i.path}:${i.startLine}-${i.endLine}`,s=k(i.kind===`snippet`?i.content:i.preview);n.push(`${a}\n${o}\n${s.text}\n\`\`\``),s.truncated&&r.add(i.path)}let i=A([...r]);return[...n,i].filter(Boolean).join(`
6
-
7
- `)}var ie=s()((e,t)=>({refs:[],addRef:n=>{let r=t();if(n.kind===`file`&&r.refs.find(e=>e.kind===`file`&&e.path===n.path))return;let i={...n,id:D()};e({refs:[...r.refs,i]})},removeRef:t=>{e(e=>({refs:e.refs.filter(e=>e.id!==t)}))},clearRefs:()=>e({refs:[]})})),ae=s()(e=>({info:null,setInfo:t=>e({info:t}),clear:()=>e({info:null})})),j=s()((e,t)=>({result:null,loading:!1,currentSeq:0,setResult:t=>e(e=>t.reqSeq===e.currentSeq?{result:t,loading:!1}:{}),setLoading:()=>e({loading:!0,result:null}),clear:()=>e({result:null,loading:!1}),nextSeq:()=>{let n=t().currentSeq+1;return e({currentSeq:n}),n}})),M=s()(e=>({phases:[],activePhaseId:null,overallPercent:0,autonomous:!1,title:null,goal:null,status:`idle`,multiBoard:!1,lastEvent:null,lastError:null,graphs:[],progress:null,setState:t=>e(e=>({phases:t.phases??e.phases,activePhaseId:t.activePhaseId===void 0?e.activePhaseId:t.activePhaseId,overallPercent:t.overallPercent??e.overallPercent,autonomous:t.autonomous??e.autonomous,title:t.title===void 0?e.title:t.title,goal:t.goal===void 0?e.goal:t.goal,status:t.status??e.status,multiBoard:t.multiBoard??e.multiBoard,lastEvent:t.lastEvent===void 0?e.lastEvent:t.lastEvent,lastError:t.lastError===void 0?e.lastError:t.lastError,graphs:t.graphs??e.graphs,progress:t.progress===void 0?e.progress:t.progress})),clear:()=>e({phases:[],activePhaseId:null,overallPercent:0,autonomous:!1,title:null,goal:null,status:`idle`,multiBoard:!1,lastEvent:null,lastError:null,graphs:[],progress:null}),hydrateFromServer:e=>{e({type:`goal.list`}),e({type:`goal.state`})}}));function N(e){if(!e||typeof e!=`object`||Array.isArray(e))return!1;let t=e;return!(typeof t.iteration!=`number`||!Number.isFinite(t.iteration)||t.task!==void 0&&typeof t.task!=`string`||t.status!==void 0&&typeof t.status!=`string`||t.progress!==void 0&&(typeof t.progress!=`number`||!Number.isFinite(t.progress))||t.progressNote!==void 0&&typeof t.progressNote!=`string`||t.timestamp!==void 0&&typeof t.timestamp!=`string`)}function P(e){return!e||typeof e.goal!=`string`||!e.goal.trim()?null:{goal:e.goal,refinedGoal:typeof e.refinedGoal==`string`?e.refinedGoal:void 0,goalState:[`active`,`paused`,`completed`,`failed`,`abandoned`].includes(e.goalState)?e.goalState:`active`,iterations:typeof e.iterations==`number`?e.iterations:0,progress:typeof e.progress==`number`?e.progress:0,progressNote:typeof e.progressNote==`string`?e.progressNote:void 0,progressTrend:e.progressTrend===`accelerating`?`up`:e.progressTrend===`stalling`?`down`:e.progressTrend===`steady`?`stable`:void 0,deliverables:Array.isArray(e.deliverables)?e.deliverables.map((e,t)=>typeof e==`string`?{id:`d${t}`,text:e,status:/^\[[x✓]\]|✅|\(done\)/i.test(e)?`done`:`pending`}:e):void 0,journal:Array.isArray(e.journal)?e.journal.filter(N):void 0,lastTask:typeof e.lastTask==`string`?e.lastTask:void 0,lastStatus:typeof e.lastStatus==`string`?e.lastStatus:void 0}}var F=s()(e=>({goal:null,setGoal:t=>e({goal:P(t)}),clear:()=>e({goal:null}),appendJournalEntry:t=>e(e=>e.goal?{goal:{...e.goal,iterations:Math.max(e.goal.iterations,t.iteration),lastTask:t.task??e.goal.lastTask,lastStatus:t.status??e.goal.lastStatus,journal:[t,...e.goal.journal??[]].slice(0,200)}}:e),refresh:()=>{try{t()?.send?.({type:`goal-state.get`})}catch{}}}));function I(e,t){return e.presence?.some(e=>e.active)===!0||e.tags?.some(e=>e.startsWith(`session:`)&&t.includes(e.slice(8)))===!0}var L=3e5,R=s()((e,t)=>({boards:[],boardTotal:0,activeBoardTotal:0,orphanedBoardTotal:0,activeBoardId:null,activeBoard:null,loading:!1,lastOutboundAction:null,error:null,queueHealth:null,supervisorSnapshot:null,workbench:null,verificationActivity:{},boardHistory:[],fetchBoardHistory:e=>{t().sendKanban(`kanban.board.history`,{boardId:e})},setLoading:t=>e({loading:t}),sendKanban:(t,n)=>(e({loading:!0,lastOutboundAction:t}),t),transitionTask:(t,n,r,i)=>{let a=`kanban.task.transition`;return e({loading:!0,lastOutboundAction:a}),a},dispatchTask:(t,n,r)=>{let i=`kanban.task.dispatch`;return e({loading:!0,lastOutboundAction:i}),i},moveTask:(t,n,r)=>{let i=`kanban.task.move`;return e({loading:!0,lastOutboundAction:i}),i},removeTask:(t,n)=>{let r=`kanban.task.remove`;return e({loading:!0,lastOutboundAction:r}),r},setActiveBoardId:t=>e({activeBoardId:t,queueHealth:null,supervisorSnapshot:null,verificationActivity:{}}),setError:t=>e({error:t}),setQueueHealth:t=>e({queueHealth:t}),handleResult:(n,r)=>{if(!r.success){e({loading:!1,error:r.error??`Kanban request failed`});return}let i=r.data;if((n===`kanban.supervisor.status`||n===`kanban.supervisor.audit`)&&i){e({supervisorSnapshot:i,loading:!1,error:null});return}if(n===`kanban.health`&&r.data){e({queueHealth:r.data,loading:!1,error:null});return}if(n===`kanban.workbench`&&r.data){e({workbench:r.data,loading:!1,error:null});return}if(n===`kanban.list`){let t=U(i)?i:null,n=t?t.items:Array.isArray(i)?i:[];e({boards:n,boardTotal:t?.total??n.length,activeBoardTotal:t?.activeTotal??n.filter(e=>W(e)).length,orphanedBoardTotal:t?.orphanedTotal??n.filter(e=>!W(e)).length,loading:!1,error:null});return}if(n===`kanban.delete`){let n=t().activeBoardId,r=i,a=r?.removed===!0,o=r?.boardId??n;e(e=>{let t=a?e.boards.find(e=>e.id===o):void 0,n=t?W(t):void 0;return{boards:a?e.boards.filter(e=>e.id!==o):e.boards,boardTotal:a?Math.max(0,e.boardTotal-1):e.boardTotal,activeBoardTotal:n===!0?Math.max(0,e.activeBoardTotal-1):e.activeBoardTotal,orphanedBoardTotal:n===!1?Math.max(0,e.orphanedBoardTotal-1):e.orphanedBoardTotal,activeBoardId:a&&e.activeBoardId===o?null:e.activeBoardId,activeBoard:a&&e.activeBoard?.id===o?null:e.activeBoard,loading:!1,error:null}});return}if(n===`kanban.task.remove`){let t=i;e(e=>{let n=z(t?.board)?t.board:null;if(n&&e.activeBoardId===n.id)return{boards:q(e.boards,K(n)),activeBoard:n,loading:!1,error:null};let r=t?.boardId,i=t?.taskId,a=t?.removed===!0&&i&&e.activeBoard&&(!r||e.activeBoard.id===r)?{...e.activeBoard,tasks:e.activeBoard.tasks.filter(e=>e.id!==i)}:e.activeBoard;return{activeBoard:a,boards:a?q(e.boards,K(a)):e.boards,loading:!1,error:null}});return}if(n===`kanban.board.history`){Array.isArray(i)&&e({boardHistory:i});return}if(n===`kanban.task.verification_started`){let t=i;if(t?.boardId&&t.taskId){let n=`${t.boardId}:${t.taskId}`;e(e=>{let t=Date.now(),r=Object.fromEntries(Object.entries(e.verificationActivity).filter(([,e])=>t-e.startedAt<L));return r[n]={startedAt:t},{verificationActivity:r,loading:!1,error:null}})}return}if(n===`kanban.task.verification_completed`&&V(i)){let t=`${i.boardId}:${i.task.id}`;e(e=>{let n={...e.verificationActivity};if(delete n[t],e.activeBoard&&e.activeBoard.id===i.boardId){let t=J(e.activeBoard,i.task);return{verificationActivity:n,boards:q(e.boards,K(t)),activeBoard:t,loading:!1,error:null}}return{verificationActivity:n,loading:!1,error:null}});return}if(H(i)){let t=i.board;e(e=>({boards:q(e.boards,K(t)),activeBoard:e.activeBoardId===t.id?t:e.activeBoard,loading:!1,error:null}));return}if(V(i)){e(e=>{if(e.activeBoard&&e.activeBoard.id===i.boardId){let t=J(e.activeBoard,i.task);return{boards:q(e.boards,K(t)),activeBoard:t,loading:!1,error:null}}return{loading:!1,error:null}});return}if(z(i)){let t=K(i);if(n!==`kanban.create`&&n!==`kanban.duplicate`&&n!==`kanban.generate`){e(e=>({boards:q(e.boards,t),activeBoard:e.activeBoardId===i.id?i:e.activeBoard,loading:!1,error:null}));return}e(e=>({boards:q(e.boards,t),activeBoardId:i.id,activeBoard:i,loading:!1,error:null}));return}if(B(i)){e(e=>({...e.activeBoard?(()=>{let t=J(e.activeBoard,i);return{activeBoard:t,boards:q(e.boards,K(t))}})():{activeBoard:e.activeBoard},loading:!1,error:null}));return}if(Array.isArray(i)&&i.every(G)){e(e=>({...e.activeBoard?(()=>{let t={...e.activeBoard,columns:i};return{activeBoard:t,boards:q(e.boards,K(t))}})():{activeBoard:e.activeBoard},loading:!1,error:null}));return}e({loading:!1,error:null})}}));function z(e){return!!e&&typeof e==`object`&&Array.isArray(e.columns)&&Array.isArray(e.tasks)}function B(e){return!!e&&typeof e==`object`&&typeof e.title==`string`}function V(e){return!!e&&typeof e==`object`&&typeof e.boardId==`string`&&B(e.task)}function H(e){return!!e&&typeof e==`object`&&z(e.board)}function U(e){return!!e&&typeof e==`object`&&Array.isArray(e.items)&&typeof e.total==`number`}function W(e){return I(e,[])}function G(e){return!!e&&typeof e==`object`&&typeof e.id==`string`}function K(e){return{id:e.id,title:e.title,description:e.description,tags:e.tags,presence:e.presence,createdAt:e.createdAt,updatedAt:e.updatedAt,columnCount:e.columns.length,taskCount:e.tasks.length,completedTaskCount:e.tasks.filter(e=>e.status===`completed`).length}}function q(e,t){return[t,...e.filter(e=>e.id!==t.id)].sort((e,t)=>t.updatedAt.localeCompare(e.updatedAt))}function J(e,t){let n=e.tasks.some(e=>e.id===t.id)?e.tasks.map(e=>e.id===t.id?t:e):[...e.tasks,t];return{...e,tasks:n}}function oe(e){switch(e){case`tui`:return`tui`;case`cli`:case`repl`:return`repl`;case`webui`:return`webui`;default:return`webui`}}function se(e){let t={tui:0,webui:0,repl:0},n=0,r=0,i={toolCalls:0,costUsd:0,tokensIn:0,tokensOut:0};for(let a of e){t[oe(a.clientType)]+=1;for(let e of a.agents)n+=1,(e.status===`running`||e.status===`streaming`)&&(r+=1),i.toolCalls+=e.toolCalls??0,i.costUsd+=e.costUsd??0,i.tokensIn+=e.tokensIn??0,i.tokensOut+=e.tokensOut??0}return{clientCounts:t,totalAgents:n,activeAgents:r,aggregate:i}}function ce(e){if(e!==void 0)return Number.isFinite(e)?Math.max(0,Math.min(100,Math.round(e))):0}function le(e){return e.map(e=>({...e,agents:e.agents.map(e=>({...e,ctxPct:ce(e.ctxPct)}))}))}var ue=0,Y=s()(e=>({clientCounts:{tui:0,webui:0,repl:0},mailActivity:[],totalMessages:0,openMessages:0,unreadMessages:0,totalAgents:0,activeAgents:0,currentSession:{},liveSessions:[],aggregate:{toolCalls:0,costUsd:0,tokensIn:0,tokensOut:0},lastUpdated:Date.now(),setClientCounts:t=>e({clientCounts:t,lastUpdated:Date.now()}),setLiveSessions:t=>{let n=le(t),r=Y.getState().liveSessions;if(r.length===n.length){let e=!0;for(let t=0;t<n.length;t++){let i=n[t],a=r[t];if(i.sessionId!==a.sessionId||i.status!==a.status||i.agentCount!==a.agentCount||i.startedAt!==a.startedAt||i.lastHeartbeatAt!==a.lastHeartbeatAt){e=!1;break}let o=i.agents??[],s=a.agents??[];if(o.length!==s.length){e=!1;break}for(let t=0;t<o.length;t++)if(o[t].id!==s[t].id||o[t].name!==s[t].name||o[t].status!==s[t].status||o[t].currentTool!==s[t].currentTool||o[t].iterations!==s[t].iterations||o[t].toolCalls!==s[t].toolCalls||o[t].ctxPct!==s[t].ctxPct||o[t].tokensIn!==s[t].tokensIn||o[t].tokensOut!==s[t].tokensOut||o[t].costUsd!==s[t].costUsd||o[t].recentTools?.[0]?.id!==s[t].recentTools?.[0]?.id||o[t].recentMail?.[0]?.id!==s[t].recentMail?.[0]?.id||o[t].activity?.reads!==s[t].activity?.reads||o[t].activity?.writes!==s[t].activity?.writes||o[t].activity?.edits!==s[t].activity?.edits||o[t].activity?.terminalCalls!==s[t].activity?.terminalCalls||o[t].activity?.mailReceived!==s[t].activity?.mailReceived||o[t].activity?.mailSent!==s[t].activity?.mailSent||o[t].activity?.linesAdded!==s[t].activity?.linesAdded||o[t].activity?.linesRemoved!==s[t].activity?.linesRemoved){e=!1;break}if(!e)break}if(e)return}e({liveSessions:n,...se(n),lastUpdated:Date.now()})},addMailActivity:t=>e(e=>({mailActivity:[{...t,seq:t.seq??++ue},...e.mailActivity].slice(0,50),lastUpdated:Date.now()})),setMailStats:(t,n,r)=>e({totalMessages:t,openMessages:n,unreadMessages:r,lastUpdated:Date.now()}),setAgentStats:(t,n)=>e({totalAgents:t,activeAgents:n,lastUpdated:Date.now()}),setCurrentSession:t=>e({currentSession:{...Y.getState().currentSession,...t},lastUpdated:Date.now()}),clear:()=>e({clientCounts:{tui:0,webui:0,repl:0},mailActivity:[],totalMessages:0,openMessages:0,unreadMessages:0,totalAgents:0,activeAgents:0,currentSession:{},liveSessions:[],aggregate:{toolCalls:0,costUsd:0,tokensIn:0,tokensOut:0},lastUpdated:Date.now()})})),de=[3e4,6e4,12e4,3e5,6e5],X=12e4,fe=s()(a(e=>({viewMode:`office`,showHud:!0,showLegend:!0,showMinimap:!0,showControls:!0,animateEdges:!0,showFeed:!0,background:`dots`,waitThresholdMs:X,setViewMode:t=>e({viewMode:t}),setShowHud:t=>e({showHud:t}),setShowLegend:t=>e({showLegend:t}),setShowMinimap:t=>e({showMinimap:t}),setShowControls:t=>e({showControls:t}),setAnimateEdges:t=>e({animateEdges:t}),setShowFeed:t=>e({showFeed:t}),setBackground:t=>e({background:t}),setWaitThresholdMs:t=>e({waitThresholdMs:Number.isFinite(t)&&t>0?Math.round(t):X})}),{name:`wrongstack-officemap`}));function Z(e){return`${e.providerId}\u0000${e.meterId}`}function pe(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.providerId==`string`&&typeof t.meterId==`string`&&Array.isArray(t.windows)&&typeof t.capturedAt==`number`}var me=s(e=>({meters:{},apply:t=>e(e=>{let n={...e.meters};for(let e of t){if(!pe(e))continue;let t=n[Z(e)];n[Z(e)]={...e,...e.planLabel===void 0&&t?.planLabel!==void 0?{planLabel:t.planLabel}:{},...e.meterLabel===void 0&&t?.meterLabel!==void 0?{meterLabel:t.meterLabel}:{}}}return{meters:n}}),clear:()=>e({meters:{}})}));function he(e){let t;for(let n of Object.values(e))for(let e of n.windows){if(!t||e.usedPercent>t.window.usedPercent){t={snapshot:n,window:e};continue}if(e.usedPercent===t.window.usedPercent){let r=e.resetsAt,i=t.window.resetsAt;r!==void 0&&(i===void 0||r<i)&&(t={snapshot:n,window:e})}}return t}function ge(e){if(e.label)return e.label;let t=e.windowMinutes;return t!==void 0&&Number.isFinite(t)&&t>0?t%1440==0?`${t/1440}d`:t%60==0?`${t/60}h`:`${t}m`:e.id}function _e(e,t=Date.now()){if(e?.resetsAt===void 0)return;let n=e.resetsAt*1e3-t;if(n<=0)return;let r=Math.floor(n/6e4);if(r<1)return`${Math.max(1,Math.round(n/1e3))}s`;let i=Math.floor(r/1440),a=Math.floor(r%1440/60),o=r%60;return i>0?a>0?`${i}d ${a}h`:`${i}d`:a>0?o>0?`${a}h ${o}m`:`${a}h`:`${o}m`}var Q=e=>`${e.providerId}\u0000${e.model}`,ve=s(e=>({entries:{},audit:[],summary:null,loading:!1,error:null,update:t=>e(e=>{let n={...e.entries},r=Q(t);if(t.state===`healthy`)delete n[r];else{let e=n[r],i=Object.fromEntries(Object.entries(t).filter(e=>e[1]!==void 0));n[r]={...e,...i}}return{entries:n}}),hydrate:t=>e({entries:Object.fromEntries(t.filter(e=>e.state!==`healthy`).map(e=>[Q(e),e]))}),applySnapshot:t=>{let n=t.statuses;if(!Array.isArray(n)){e({error:`Invalid snapshot from server`,loading:!1});return}let r={};for(let e of n){if(!e||typeof e!=`object`)continue;let t=e,n=typeof t.providerId==`string`?t.providerId:``,i=typeof t.model==`string`?t.model:``;if(!n||!i)continue;let a=t.state;(a===`healthy`||a===`degraded`||a===`blocked`)&&(r[`${n}\u0000${i}`]={providerId:n,model:i,state:a,reason:(typeof t.lastErrorKind==`string`?t.lastErrorKind:``)||a,updatedAt:typeof t.lastFailureAt==`number`?t.lastFailureAt:Date.now(),...typeof t.stateExpiresAt==`number`?{stateExpiresAt:t.stateExpiresAt}:{},...typeof t.consecutiveFailures==`number`?{consecutiveFailures:t.consecutiveFailures}:{},...typeof t.totalFailures==`number`?{totalFailures:t.totalFailures}:{},...typeof t.rateLimitHits==`number`?{rateLimitHits:t.rateLimitHits}:{},...typeof t.lastErrorMessage==`string`?{lastErrorMessage:t.lastErrorMessage}:{},...typeof t.lastErrorKind==`string`?{lastErrorKind:t.lastErrorKind}:{},...typeof t.lastErrorStatus==`number`?{lastErrorStatus:t.lastErrorStatus}:{},...Array.isArray(t.recentErrors)?{recentErrors:t.recentErrors.slice(0,20)}:{},...typeof t.lastSessionId==`string`?{lastSessionId:t.lastSessionId}:{},...typeof t.lastAgentId==`string`?{lastAgentId:t.lastAgentId}:{},...typeof t.lastFailureAt==`number`?{lastFailureAt:t.lastFailureAt}:{}})}let i=t;e({entries:r,summary:{totalPairs:typeof i.totalPairs==`number`?i.totalPairs:0,healthy:typeof i.healthy==`number`?i.healthy:0,degraded:typeof i.degraded==`number`?i.degraded:0,blocked:typeof i.blocked==`number`?i.blocked:0,totalFailures:typeof i.totalFailures==`number`?i.totalFailures:0,totalRateLimits:typeof i.totalRateLimits==`number`?i.totalRateLimits:0},error:null,loading:!1})},setAudit:t=>e({audit:t}),setLoading:t=>e({loading:t}),setError:t=>e({error:t,loading:!1}),removeEntry:(t,n)=>e(e=>{let r={...e.entries};return delete r[Q({providerId:t,model:n})],{entries:r}}),clear:()=>e({entries:{},audit:[],summary:null,error:null})})),ye=s()(e=>({snapshot:null,boards:[],lifecycleResult:null,destroying:!1,setSnapshot:t=>e({snapshot:t}),setBoards:t=>e({boards:t}),setLifecycleResult:t=>e({lifecycleResult:t}),setDestroying:t=>e({destroying:t})})),be=f(e=>({sideEffects:[],loading:!1,setSideEffects:t=>e({sideEffects:t,loading:!1}),setLoading:t=>e({loading:t}),clear:()=>e({sideEffects:[],loading:!1})})),xe=s()(e=>({specs:[],detail:null,expandedSpecId:null,setSpecs:t=>e({specs:t}),setDetail:t=>e({detail:t}),setExpanded:t=>e({expandedSpecId:t,detail:null})})),Se=new Set([`idle`,`queued`,`discovering`,`inventorying`,`enriching`,`researching`,`synthesizing`,`completed`,`failed`,`cancelled`]);function Ce(e){return Se.has(e)?e:void 0}var $={snapshot:null,stale:!1,loading:!1,error:null,activeJob:null,lastWorkspaceId:null,reportId:null},we=s()(e=>({...$,setSnapshot:(t,n=!1)=>e(e=>({snapshot:t,stale:n,loading:!1,error:null,activeJob:e.activeJob?{...e.activeJob,status:`completed`,error:null}:null})),setLoading:t=>e({loading:t}),setError:t=>e({error:t,loading:!1}),jobStarted:(t,n)=>e({activeJob:{id:t,kind:n,status:`queued`,progress:null,error:null},error:null,loading:!0}),jobProgress:(t,n)=>e(e=>{if(e.activeJob?.id!==t)return e;let r=Ce(n.phase);return r?{activeJob:{...e.activeJob,status:r,progress:n},loading:!0}:e}),jobFailed:(t,n)=>e(e=>e.activeJob?.id===t?{activeJob:{...e.activeJob,status:`failed`,error:n},error:n,loading:!1}:e),jobCancelled:t=>e(e=>({activeJob:e.activeJob?.id===t?{...e.activeJob,status:`cancelled`,error:null}:e.activeJob,loading:!1})),workspaceCompleted:t=>e({lastWorkspaceId:t}),reportReady:t=>e({reportId:t}),clear:()=>e($)})),Te=s()(e=>({worktrees:[],baseBranch:``,activity:[],orphans:[],canClean:!1,cleanResult:null,mergeResult:null,diffByDir:{},setSnapshot:(t,n)=>e({worktrees:t,baseBranch:n}),pushEvent:t=>e(e=>({activity:[...e.activity,t].slice(-40)})),setOrphans:(t,n,r)=>e({orphans:t,canClean:n,cleanBlockedReason:r}),setCleanResult:t=>e({cleanResult:t}),setMergeResult:t=>e({mergeResult:t}),setDiff:(t,n)=>e(e=>({diffByDir:{...e.diffByDir,[t]:n}}))}));export{te as C,u as D,f as E,E as S,b as T,M as _,ye as a,re as b,ge as c,de as d,fe as f,F as g,I as h,be as i,he as l,R as m,we as n,ve as o,Y as p,xe as r,_e as s,Te as t,me as u,j as v,ne as w,ie as x,ae as y};
@@ -1 +0,0 @@
1
- import{_o as e,vo as t}from"./vendor-V3ydTHqN.js";var n=[`chat`,`agents`,`files`,`changes`,`mailbox`,`skills`,`design`];function r(e){return n.includes(e)?e:e===`context`||e===`history`||e===`sessions`||e===`projects`?`chat`:e===`worktrees`?`changes`:`chat`}var i=`chat.settings.provider-test.memory.roster.context.goal.kanban.sddhub.files.changes.history.sessions.session-inspect.setup.skill.mailbox.debug.design-gallery.refresh-debug.analytics.codemap.techstack.chronicle.intake.deadcode.prompts.chimera`.split(`.`);function a(e){return i.includes(e)?e:`chat`}var o=[`goal`,`goal-state`,`fleet`,`work`,`worktrees`,`collab`];function s(e){return e==null||!o.includes(e)?null:e}var c=[`general`,`fonts`,`provider`,`connection`,`agent`,`execution`,`fallbacks`,`routing`,`fleet`,`integrations`,`chimera`,`context`,`logs`,`security`,`display`];function l(e){return c.includes(e)?e:`general`}function u(){if(typeof window>`u`)return!1;if(window.wrongstackDesktopHost)return!0;try{return new URLSearchParams(window.location.search).get(`shell`)===`desktop`}catch{return!1}}function d(e={}){return{currentView:`chat`,activeActivity:`chat`,sidebarOpen:e.sidebarOpen??!1,dockSection:null,chromeSessionId:null,chromeBySession:{},dockCustomizeOpen:!1,fleetMonitorOpen:!1,agentsMonitorOpen:!1,processMonitorOpen:!1,queuePanelOpen:!1,cronJobsOpen:!1,sideContextBreakdownOpen:!1,inspectorOpen:!1,inspectorTab:`fleet`,inspectorTarget:null,inspectorFocusedAgentId:null,subagentChatFocusId:null,subagentChatFocusSessionId:null,terminalOpen:!1,paletteOpen:!1,shortcutsOpen:!1,searchOpen:!1,searchQuery:``,searchActiveMessageId:null,modelSwitcherOpen:!1,promptLibraryOpen:!1,selectedMailMessage:null,refinePanel:null,skillsState:f(),chatSwitcherOpen:!1,chatCheckpointOpen:!1,chatMemoryPanelOpen:!1,chatContextBreakdownOpen:!1,chatContextEditorOpen:!1,chatToolStatsOpen:!1,chatInputCollapsed:!1}}function f(){return{selectedSkill:null,navHistory:[],historyIndex:-1,detailOpen:!1,knownRefs:{},updateAvailableCount:0}}function p(){return{sidebarOpen:!0,activeActivity:`chat`,currentView:`chat`,inspectSessionId:null,searchOpen:!1,searchQuery:``,searchActiveMessageId:null,scrollTarget:null,modelSwitcherOpen:!1,promptLibraryOpen:!1,promptInsertRequest:null,refinePanel:null,draftInput:``,draftImages:[],processMonitorOpen:!1,queuePanelOpen:!1,cronJobsOpen:!1,sideContextBreakdownOpen:!1,terminalOpen:!1,dockSection:null,workDashboardTab:`todos`,inspectorOpen:!1,inspectorTab:`fleet`,inspectorTarget:null,inspectorFocusedAgentId:null,agentRosterActiveTab:`live`,changesPanelTab:`changes`,dockCustomizeOpen:!1,skillsState:f(),selectedMailMessage:null,scrollPositions:{},chatSwitcherOpen:!1,chatCheckpointOpen:!1,chatMemoryPanelOpen:!1,chatContextBreakdownOpen:!1,chatContextEditorOpen:!1,chatToolStatsOpen:!1,chatInputCollapsed:!1}}function m(e){return{sidebarOpen:e.sidebarOpen,activeActivity:e.activeActivity,currentView:e.currentView,inspectSessionId:e.inspectSessionId,searchOpen:e.searchOpen,searchQuery:e.searchQuery,searchActiveMessageId:e.searchActiveMessageId,scrollTarget:e.scrollTarget,modelSwitcherOpen:e.modelSwitcherOpen,promptLibraryOpen:e.promptLibraryOpen,promptInsertRequest:e.promptInsertRequest,refinePanel:e.refinePanel,draftInput:e.draftInput,draftImages:e.draftImages,processMonitorOpen:e.processMonitorOpen,queuePanelOpen:e.queuePanelOpen,cronJobsOpen:e.cronJobsOpen,sideContextBreakdownOpen:e.sideContextBreakdownOpen,terminalOpen:e.terminalOpen,dockSection:e.dockSection,workDashboardTab:e.workDashboardTab,inspectorOpen:e.inspectorOpen,inspectorTab:e.inspectorTab,inspectorTarget:e.inspectorTarget,inspectorFocusedAgentId:e.inspectorFocusedAgentId,agentRosterActiveTab:e.agentRosterActiveTab,changesPanelTab:e.changesPanelTab,dockCustomizeOpen:e.dockCustomizeOpen,skillsState:e.skillsState,selectedMailMessage:e.selectedMailMessage,scrollPositions:e.scrollPositions,chatSwitcherOpen:e.chatSwitcherOpen,chatCheckpointOpen:e.chatCheckpointOpen,chatMemoryPanelOpen:e.chatMemoryPanelOpen,chatContextBreakdownOpen:e.chatContextBreakdownOpen,chatContextEditorOpen:e.chatContextEditorOpen,chatToolStatsOpen:e.chatToolStatsOpen,chatInputCollapsed:e.chatInputCollapsed}}function h(e,t){return e.chromeSessionId?{chromeBySession:{...e.chromeBySession,[e.chromeSessionId]:{...m(e),...t}}}:{}}var g={name:`wrongstack-ui`,version:8,migrate:(e,t)=>{let i=e??{};if(i.activeActivity=r(i.activeActivity),typeof i.sidebarWidth==`number`&&(i.sidebarWidth=Math.max(240,Math.min(560,i.sidebarWidth))),t<2&&(delete i.fleetDrawerOpen,delete i.agentsDrawerOpen),`currentView`in i&&(i.currentView=a(i.currentView)),`dockSection`in i&&(i.dockSection=s(i.dockSection)),`settingsActiveTab`in i&&(i.settingsActiveTab=l(i.settingsActiveTab)),`activityBarOrder`in i&&i.activityBarOrder!=null){let e=i.activityBarOrder,t=new Set(n),r=Array.isArray(e.panels)?Array.from(new Set(e.panels.filter(e=>typeof e==`string`&&t.has(e)))):[],o=Array.isArray(e.views)?Array.from(new Set(e.views.map(a))):[];i.activityBarOrder=r.length||o.length?{panels:r,views:o}:null}return t<6&&delete i.draftInput,t<7&&(delete i.chromeSessionId,delete i.chromeBySession),i},merge:(e,t)=>{let n={...t,...e??{}};return n.activeActivity=r(n.activeActivity),n.currentView=a(n.currentView),n.dockSection=s(n.dockSection),n.settingsActiveTab=l(n.settingsActiveTab),typeof n.chromeSessionId!=`string`&&(n.chromeSessionId=null),(typeof n.chromeBySession!=`object`||n.chromeBySession===null)&&(n.chromeBySession={}),n.sidebarWidth=Math.max(240,Math.min(560,n.sidebarWidth)),u()?{...n,...d({sidebarOpen:!1})}:n},partialize:e=>({sidebarOpen:e.sidebarOpen,activeActivity:e.activeActivity,sidebarWidth:e.sidebarWidth,promptHistory:e.promptHistory,pinnedIds:e.pinnedIds,compactMode:e.compactMode,favoriteSessionIds:e.favoriteSessionIds,sessionNicknames:e.sessionNicknames,fileExplorerWidth:e.fileExplorerWidth,refineEnabled:e.refineEnabled,hiddenChips:e.hiddenChips,workDashboardTab:e.workDashboardTab,inspectorOpen:e.inspectorOpen,inspectorTab:e.inspectorTab,skillsState:e.skillsState,activityBarOrder:e.activityBarOrder,currentView:e.currentView,dockSection:e.dockSection,settingsActiveTab:e.settingsActiveTab,scrollPositions:e.scrollPositions})},_=2048,v=2097152,y=new Set([`image/png`,`image/jpeg`,`image/webp`,`image/gif`]),b=class extends Error{reason;constructor(e,t){super(e),this.reason=t,this.name=`ImageAttachmentError`}};function x(e){return new Promise((t,n)=>{let r=new FileReader;r.onload=()=>t(r.result),r.onerror=()=>n(r.error),r.readAsDataURL(e)})}function S(e){let t=e.indexOf(`,`),n=t>=0?e.length-t-1:e.length;return Math.floor(n*3/4)}function C(e){return/^data:([^;,]+)/.exec(e)?.[1]??`image/png`}async function w(e){try{return await createImageBitmap(e)}catch{let t=URL.createObjectURL(e);try{return await new Promise((e,n)=>{let r=new Image;r.onload=()=>e(r),r.onerror=()=>n(Error(`image decode failed`)),r.src=t})}finally{URL.revokeObjectURL(t)}}}function T(e,t,n,r,i){let a=document.createElement(`canvas`);a.width=t,a.height=n;let o=a.getContext(`2d`);if(!o)throw new b(`canvas 2d context unavailable`,`decode_failed`);o.drawImage(e,0,0,t,n);let s=a.toDataURL(`image/webp`,i);return s.startsWith(`data:image/webp`)?s:r?a.toDataURL(`image/png`):a.toDataURL(`image/jpeg`,i)}var E=0;function D(){return E+=1,`img_${Date.now()}_${E}`}async function O(e){let t=y.has(e.type),n;try{n=await w(e)}catch{throw new b(`Could not decode image "${e.name}"`,`decode_failed`)}let r=n.width,i=n.height,a=Math.max(r,i);if(!(!t||a>_||e.size>v)){let t=await x(e);return{id:D(),dataUrl:t,mediaType:e.type,bytes:S(t),name:e.name||void 0,width:r,height:i}}let o=e.type!==`image/jpeg`,s=Math.min(1,_/a),c=.85,l=T(n,Math.max(1,Math.round(r*s)),Math.max(1,Math.round(i*s)),o,c);S(l)>4194304&&(s=Math.min(s,1280/a),c=.7,l=T(n,Math.max(1,Math.round(r*s)),Math.max(1,Math.round(i*s)),o,c)),`close`in n&&n.close();let u=S(l);if(u>4194304)throw new b(`Image "${e.name}" is too large after compression`,`too_large`);return{id:D(),dataUrl:l,mediaType:C(l),bytes:u,name:e.name||void 0,width:Math.max(1,Math.round(r*s)),height:Math.max(1,Math.round(i*s))}}function k(e){return e.map(e=>{let t=e.dataUrl.indexOf(`,`);return{data:t>=0?e.dataUrl.slice(t+1):e.dataUrl,mediaType:e.mediaType,...e.name?{name:e.name}:{}}})}var A=t()(e(e=>({sidebarOpen:!0,activeActivity:`chat`,settingsOpen:!1,currentView:`chat`,showConfirmDialog:!1,confirmInfo:null,paletteOpen:!1,shortcutsOpen:!1,searchOpen:!1,searchQuery:``,searchActiveMessageId:null,scrollTarget:null,promptHistory:[],sidebarWidth:304,pinnedIds:[],compactMode:!1,modelSwitcherOpen:!1,favoriteSessionIds:[],sessionNicknames:{},fileExplorerWidth:220,refineEnabled:!0,refinePanel:null,promptLibraryOpen:!1,promptInsertRequest:null,dockSection:null,workDashboardTab:`todos`,chromeSessionId:null,chromeBySession:{},hiddenChips:[],dockCustomizeOpen:!1,fleetMonitorOpen:!1,agentsMonitorOpen:!1,inspectorOpen:!1,inspectorTab:`fleet`,inspectorTarget:null,inspectorFocusedAgentId:null,subagentChatFocusId:null,subagentChatFocusSessionId:null,processMonitorOpen:!1,queuePanelOpen:!1,cronJobsOpen:!1,inspectSessionId:null,terminalOpen:!1,terminalCreateNonce:0,agentRosterActiveTab:`live`,changesPanelTab:`changes`,settingsActiveTab:`general`,scrollPositions:{},activityBarOrder:null,draftInput:``,draftImages:[],sideContextBreakdownOpen:!1,chatSwitcherOpen:!1,chatCheckpointOpen:!1,chatMemoryPanelOpen:!1,chatContextBreakdownOpen:!1,chatContextEditorOpen:!1,chatToolStatsOpen:!1,chatInputCollapsed:!1,selectedMailMessage:null,skillsState:f(),selectActivity:t=>e(e=>({activeActivity:t,...h(e,{activeActivity:t})})),toggleSidebar:()=>e(e=>{let t=!e.sidebarOpen;return{sidebarOpen:t,...h(e,{sidebarOpen:t})}}),setSidebarOpen:t=>e(e=>({sidebarOpen:t,...h(e,{sidebarOpen:t})})),setSettingsOpen:t=>e({settingsOpen:t}),setCurrentView:t=>e(e=>{let n=a(t);return{currentView:n,...h(e,{currentView:n})}}),showConfirm:t=>e({showConfirmDialog:!0,confirmInfo:t}),hideConfirm:()=>e({showConfirmDialog:!1,confirmInfo:null}),setPaletteOpen:t=>e({paletteOpen:t}),setShortcutsOpen:t=>e({shortcutsOpen:t}),setSearchOpen:t=>e(e=>({searchOpen:t,searchQuery:``,searchActiveMessageId:null,...h(e,{searchOpen:t,searchQuery:``,searchActiveMessageId:null})})),setSearchQuery:t=>e(e=>({searchQuery:t,...h(e,{searchQuery:t})})),setSearchActiveMessageId:t=>e(e=>({searchActiveMessageId:t,...h(e,{searchActiveMessageId:t})})),requestScrollToMessage:t=>e(e=>{let n={id:t,nonce:(e.scrollTarget?.nonce??0)+1};return{scrollTarget:n,...h(e,{scrollTarget:n})}}),pushPrompt:t=>e(e=>{let n=t.trim();return n?{promptHistory:[n,...e.promptHistory.filter(e=>e!==n)].slice(0,50)}:e}),setSidebarWidth:t=>e({sidebarWidth:Math.max(240,Math.min(560,Math.round(t)))}),togglePin:t=>e(e=>({pinnedIds:e.pinnedIds.includes(t)?e.pinnedIds.filter(e=>e!==t):[...e.pinnedIds,t]})),unpinAll:()=>e({pinnedIds:[]}),toggleCompactMode:()=>e(e=>({compactMode:!e.compactMode})),setModelSwitcherOpen:t=>e(e=>({modelSwitcherOpen:t,...h(e,{modelSwitcherOpen:t})})),toggleFavoriteSession:t=>e(e=>({favoriteSessionIds:e.favoriteSessionIds.includes(t)?e.favoriteSessionIds.filter(e=>e!==t):[...e.favoriteSessionIds,t]})),setSessionNickname:(t,n)=>e(e=>{let r=n.trim(),i={...e.sessionNicknames};return r?i[t]=r:delete i[t],{sessionNicknames:i}}),setFileExplorerWidth:t=>e({fileExplorerWidth:Math.max(160,Math.min(400,Math.round(t)))}),toggleRefineEnabled:()=>e(e=>({refineEnabled:!e.refineEnabled})),setRefinePanel:t=>e(e=>({refinePanel:t,...h(e,{refinePanel:t})})),setPromptLibraryOpen:t=>e(e=>({promptLibraryOpen:t,...h(e,{promptLibraryOpen:t})})),requestPromptInsert:t=>e(e=>({promptInsertRequest:t,promptLibraryOpen:!1,...h(e,{promptInsertRequest:t,promptLibraryOpen:!1})})),clearPromptInsert:()=>e(e=>({promptInsertRequest:null,...h(e,{promptInsertRequest:null})})),setDockSection:t=>e(e=>({dockSection:t,...h(e,{dockSection:t,inspectorOpen:!t&&e.inspectorOpen}),...t?{inspectorOpen:!1}:{}})),setWorkDashboardTab:t=>e(e=>({workDashboardTab:t,...h(e,{workDashboardTab:t})})),bindSessionChrome:t=>e(e=>{if(e.chromeSessionId===t)return{};let n={...e.chromeBySession};if(e.chromeSessionId){let t=m(e);n[e.chromeSessionId]=t.refinePanel?{...t,refinePanel:null,draftInput:t.refinePanel.original}:t}let r=(t?n[t]:void 0)??p();return{chromeSessionId:t,chromeBySession:n,subagentChatFocusId:null,subagentChatFocusSessionId:t,sidebarOpen:r.sidebarOpen??p().sidebarOpen,activeActivity:r.activeActivity,currentView:r.currentView,inspectSessionId:r.inspectSessionId,searchOpen:r.searchOpen,searchQuery:r.searchQuery,searchActiveMessageId:r.searchActiveMessageId,scrollTarget:r.scrollTarget,modelSwitcherOpen:r.modelSwitcherOpen,promptLibraryOpen:r.promptLibraryOpen,promptInsertRequest:r.promptInsertRequest,refinePanel:r.refinePanel,draftInput:r.draftInput,draftImages:r.draftImages,processMonitorOpen:r.processMonitorOpen,queuePanelOpen:r.queuePanelOpen,cronJobsOpen:r.cronJobsOpen,sideContextBreakdownOpen:r.sideContextBreakdownOpen,terminalOpen:r.terminalOpen,dockSection:r.dockSection,workDashboardTab:r.workDashboardTab,inspectorOpen:r.inspectorOpen,inspectorTab:r.inspectorTab,inspectorTarget:r.inspectorTarget,inspectorFocusedAgentId:r.inspectorFocusedAgentId,agentRosterActiveTab:r.agentRosterActiveTab,changesPanelTab:r.changesPanelTab,dockCustomizeOpen:r.dockCustomizeOpen??!1,skillsState:r.skillsState??f(),selectedMailMessage:r.selectedMailMessage??null,scrollPositions:r.scrollPositions??{},chatSwitcherOpen:r.chatSwitcherOpen??!1,chatCheckpointOpen:r.chatCheckpointOpen??!1,chatMemoryPanelOpen:r.chatMemoryPanelOpen??!1,chatContextBreakdownOpen:r.chatContextBreakdownOpen??!1,chatContextEditorOpen:r.chatContextEditorOpen??!1,chatInputCollapsed:r.chatInputCollapsed??!1}}),toggleDockSection:t=>e(e=>{let n=e.dockSection===t?null:t;return{dockSection:n,...h(e,{dockSection:n,inspectorOpen:!n&&e.inspectorOpen}),...n?{inspectorOpen:!1}:{}}}),toggleChipHidden:t=>e(e=>{let n=e.hiddenChips.includes(t),r=!n&&e.dockSection===t?null:e.dockSection;return{hiddenChips:n?e.hiddenChips.filter(e=>e!==t):[...e.hiddenChips,t],dockSection:r,...h(e,{dockSection:r})}}),showDockChip:t=>e(e=>({hiddenChips:e.hiddenChips.filter(e=>e!==t)})),setDockCustomizeOpen:t=>e(e=>({dockCustomizeOpen:t,...h(e,{dockCustomizeOpen:t})})),setAgentRosterActiveTab:t=>e(e=>({agentRosterActiveTab:t,...h(e,{agentRosterActiveTab:t})})),setChangesPanelTab:t=>e(e=>({changesPanelTab:t,...h(e,{changesPanelTab:t})})),setFleetMonitorOpen:t=>e(e=>({fleetMonitorOpen:!1,inspectorOpen:t?!0:e.inspectorTab!==`fleet`&&e.inspectorOpen,inspectorTab:t?`fleet`:e.inspectorTab,...h(e,{inspectorOpen:t?!0:e.inspectorTab!==`fleet`&&e.inspectorOpen,inspectorTab:t?`fleet`:e.inspectorTab,dockSection:t?null:e.dockSection}),...t?{dockSection:null}:{}})),setAgentsMonitorOpen:t=>e(e=>({agentsMonitorOpen:!1,inspectorOpen:t?!0:e.inspectorTab!==`agents`&&e.inspectorOpen,inspectorTab:t?`agents`:e.inspectorTab,...h(e,{inspectorOpen:t?!0:e.inspectorTab!==`agents`&&e.inspectorOpen,inspectorTab:t?`agents`:e.inspectorTab,dockSection:t?null:e.dockSection}),...t?{dockSection:null}:{}})),setInspectorOpen:t=>e(e=>({inspectorOpen:t,...t?{dockSection:null}:{inspectorTarget:null},...h(e,{inspectorOpen:t,dockSection:t?null:e.dockSection,inspectorTarget:t?e.inspectorTarget:null})})),setInspectorTab:t=>e(e=>({inspectorTab:t,...h(e,{inspectorTab:t})})),openInspectorTarget:t=>e(e=>{let n=e.inspectorTab,r=e.inspectorFocusedAgentId;return t.kind===`fleet`?n=t.tab??`fleet`:t.kind===`agent`?(n=`agents`,r=t.agentId):t.kind===`sideEffects`?n=`sideEffects`:t.kind===`council`&&(n=`council`),{inspectorOpen:!0,inspectorTarget:t,inspectorTab:n,inspectorFocusedAgentId:r,dockSection:null,...h(e,{inspectorOpen:!0,inspectorTarget:t,inspectorTab:n,inspectorFocusedAgentId:r,dockSection:null})}}),closeInspector:()=>e(e=>({inspectorOpen:!1,inspectorTarget:null,...h(e,{inspectorOpen:!1,inspectorTarget:null})})),setInspectorFocusedAgentId:t=>e(e=>({inspectorFocusedAgentId:t,...h(e,{inspectorFocusedAgentId:t})})),setSubagentChatFocus:(t,n)=>e(e=>({subagentChatFocusId:t,subagentChatFocusSessionId:(n===``?null:n)??e.chromeSessionId??e.subagentChatFocusSessionId??null})),forgetSession:t=>e(e=>{let n=e.subagentChatFocusSessionId===t,r=t in e.chromeBySession||e.chromeSessionId===t;if(!n&&!r)return e;let i={...e.chromeBySession};delete i[t];let a=e.subagentChatFocusSessionId===t,o=e.chromeSessionId===t;return{chromeBySession:i,...a?{subagentChatFocusId:null,subagentChatFocusSessionId:null}:{},...o?{chromeSessionId:null,...p()}:{}}}),toggleInspector:()=>e(e=>{let t=!e.inspectorOpen,n=t?null:e.dockSection;return{inspectorOpen:t,dockSection:n,...h(e,{inspectorOpen:t,dockSection:n})}}),setProcessMonitorOpen:t=>e(e=>({processMonitorOpen:t,...h(e,{processMonitorOpen:t})})),setQueuePanelOpen:t=>e(e=>({queuePanelOpen:t,...h(e,{queuePanelOpen:t})})),setCronJobsOpen:t=>e(e=>({cronJobsOpen:t,...h(e,{cronJobsOpen:t})})),setInspectSession:t=>e(e=>({inspectSessionId:t,currentView:`session-inspect`,...h(e,{inspectSessionId:t,currentView:`session-inspect`})})),clearInspectSession:()=>e(e=>({inspectSessionId:null,currentView:`chat`,...h(e,{inspectSessionId:null,currentView:`chat`})})),setTerminalOpen:t=>e(e=>({terminalOpen:t,...h(e,{terminalOpen:t})})),toggleTerminal:()=>e(e=>{let t=!e.terminalOpen;return{terminalOpen:t,...h(e,{terminalOpen:t})}}),requestTerminalCreate:()=>e(e=>({terminalCreateNonce:e.terminalCreateNonce+1})),setSettingsActiveTab:t=>e({settingsActiveTab:l(t)}),setScrollPosition:(t,n)=>e(e=>{let r={...e.scrollPositions,[t]:n};return{scrollPositions:r,...h(e,{scrollPositions:r})}}),setActivityBarOrder:t=>e({activityBarOrder:t}),setDraftInput:t=>e(e=>({draftInput:t,...h(e,{draftInput:t})})),setDraftImages:t=>e(e=>{let n=t.slice(-8);return{draftImages:n,...h(e,{draftImages:n})}}),setSideContextBreakdownOpen:t=>e(e=>({sideContextBreakdownOpen:t,...h(e,{sideContextBreakdownOpen:t})})),setChatSwitcherOpen:t=>e(e=>({chatSwitcherOpen:t,...h(e,{chatSwitcherOpen:t})})),setChatCheckpointOpen:t=>e(e=>({chatCheckpointOpen:t,...h(e,{chatCheckpointOpen:t})})),setChatMemoryPanelOpen:t=>e(e=>({chatMemoryPanelOpen:t,...h(e,{chatMemoryPanelOpen:t})})),setChatContextBreakdownOpen:t=>e(e=>({chatContextBreakdownOpen:t,...h(e,{chatContextBreakdownOpen:t})})),setChatToolStatsOpen:t=>e(e=>({chatToolStatsOpen:t,...h(e,{chatToolStatsOpen:t})})),setChatContextEditorOpen:t=>e(e=>({chatContextEditorOpen:t,...h(e,{chatContextEditorOpen:t})})),setChatInputCollapsed:t=>e(e=>({chatInputCollapsed:t,...h(e,{chatInputCollapsed:t})})),setSkillsState:t=>e(e=>({skillsState:t,...h(e,{skillsState:t})})),setSelectedMailMessage:t=>e(e=>({selectedMailMessage:t,...h(e,{selectedMailMessage:t})}))}),g));function j(e={}){A.setState(d(e))}export{k as a,O as i,A as n,b as r,j as t};