@wrongstack/webui 0.308.0 → 0.308.2

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 (84) hide show
  1. package/dist/assets/{AgentRosterView-CIUKmLsb.js → AgentRosterView-BRsiLkYT.js} +1 -1
  2. package/dist/assets/{AnalyticsDashboard-B5nVNt6L.js → AnalyticsDashboard-wgm1_jI-.js} +1 -1
  3. package/dist/assets/{AudienceMemoryPanel-8nS326Uh.js → AudienceMemoryPanel-Dj2zRV6l.js} +1 -1
  4. package/dist/assets/{ChangesView-mapTz0_T.js → ChangesView-Cc7SriFS.js} +1 -1
  5. package/dist/assets/{ChronicleDashboard-DUzceZNb.js → ChronicleDashboard-CyqJjnDP.js} +1 -1
  6. package/dist/assets/{CodeEditor-OjU9rotb.js → CodeEditor-CrQxq-34.js} +1 -1
  7. package/dist/assets/{CodeMap-BB1WETLd.js → CodeMap-CAhE44jp.js} +1 -1
  8. package/dist/assets/{ConfirmModal-LBZaZgsG.js → ConfirmModal-gREeWWsa.js} +1 -1
  9. package/dist/assets/{CronJobsPanel-DJaiJw1W.js → CronJobsPanel-D6AfSxD8.js} +1 -1
  10. package/dist/assets/{DeadCodeScanPanel-nlQ9nL3Y.js → DeadCodeScanPanel-LOzt0Z1Z.js} +1 -1
  11. package/dist/assets/{DebugDashboard-BwSbR59I.js → DebugDashboard-CNdS9FFO.js} +1 -1
  12. package/dist/assets/{DesignGalleryView-DLKWmyVp.js → DesignGalleryView-CDDM4pDl.js} +1 -1
  13. package/dist/assets/{GoalView-BtSGdftD.js → GoalView-mzLqil_K.js} +1 -1
  14. package/dist/assets/{KanbanView-CyVG4DQu.js → KanbanView-Dlsji4r2.js} +1 -1
  15. package/dist/assets/{MailboxDetailView-2NJVLrjb.js → MailboxDetailView-Cxx74zQn.js} +1 -1
  16. package/dist/assets/{MemoryDrawer-n3cwB9m3.js → MemoryDrawer-BnT2jWmE.js} +1 -1
  17. package/dist/assets/MemoryManager-DlVmZ-0S.js +1 -0
  18. package/dist/assets/{ModelPicker-B21-QbDB.js → ModelPicker-CsaLCgdi.js} +1 -1
  19. package/dist/assets/{OfficeMapPanel-BKHjEIu9.js → OfficeMapPanel-B_95mXEy.js} +1 -1
  20. package/dist/assets/{ProcessMonitor-9TOnqT6l.js → ProcessMonitor-Dmmbx4lh.js} +1 -1
  21. package/dist/assets/PromptJournalView-DBCw7oeQ.js +1 -0
  22. package/dist/assets/{QueuePanel--PTd2-7z.js → QueuePanel-CKAGgWxS.js} +1 -1
  23. package/dist/assets/{RefreshDebugView-CuKbgI-T.js → RefreshDebugView-CKPQ_tKX.js} +1 -1
  24. package/dist/assets/{RequirementIntakeView-DnNSLw78.js → RequirementIntakeView-B5JKkW9E.js} +1 -1
  25. package/dist/assets/{SageTabs-B-m4WBoA.js → SageTabs-D04tfLki.js} +2 -2
  26. package/dist/assets/{SddFlowGraph-DdYgCVM_.js → SddFlowGraph-BCgIDw11.js} +1 -1
  27. package/dist/assets/{SddHub-DZCKF3Gw.js → SddHub-CkH8Kv7V.js} +1 -1
  28. package/dist/assets/{SessionInspectView-Cf4ypYKn.js → SessionInspectView-PA6jl9bt.js} +1 -1
  29. package/dist/assets/{SessionList-D4D2Cai9.js → SessionList-vOuy4gzk.js} +1 -1
  30. package/dist/assets/{SessionsDashboard-DoAbZStd.js → SessionsDashboard-DXt34ZON.js} +1 -1
  31. package/dist/assets/{SetupScreen-CMrLwoo9.js → SetupScreen-Cm50YBwk.js} +1 -1
  32. package/dist/assets/{SkillDetailView-sVjQG3qG.js → SkillDetailView-BBu6DBBh.js} +1 -1
  33. package/dist/assets/{SpecsView-B53AUOo3.js → SpecsView-DeHi6LWP.js} +1 -1
  34. package/dist/assets/{TechStackView-iONTty84.js → TechStackView-cARkf3Ep.js} +1 -1
  35. package/dist/assets/{TerminalPanel-1mqoe2_8.js → TerminalPanel-HWOYFCGa.js} +1 -1
  36. package/dist/assets/{Toaster-wXvKXbbS.js → Toaster-CQLQAp7y.js} +1 -1
  37. package/dist/assets/{activity-DWHlYL9x.js → activity-BCIzGgqa.js} +2 -2
  38. package/dist/assets/{activity-DTSVEiLK.js → activity-BZIZDVJp.js} +2 -2
  39. package/dist/assets/{activity-jL8-j1D0.js → activity-CQqsspgO.js} +2 -2
  40. package/dist/assets/{activity-C0qPnCbW.js → activity-ChTE_hao.js} +2 -2
  41. package/dist/assets/{activity-DjnYvN9C.js → activity-CnuG3uZL.js} +2 -2
  42. package/dist/assets/{activity-fdbTRXeg.js → activity-DFBPo9d3.js} +2 -2
  43. package/dist/assets/{activity-phJuGuf4.js → activity-K2WIjlQo.js} +2 -2
  44. package/dist/assets/{i18n-CDoHRskt.js → i18n-CcHSmDoO.js} +2 -2
  45. package/dist/assets/{index-BUQkH6BW.js → index-Bj3blCRO.js} +6 -6
  46. package/dist/assets/index-DBU8t21H.css +1 -0
  47. package/dist/assets/{roster-ws-Cinqwkgb.js → roster-ws-XgkT9mo8.js} +1 -1
  48. package/dist/assets/settings-50uwXQIW.js +1 -0
  49. package/dist/assets/settings-BPT8LWkU.js +1 -0
  50. package/dist/assets/settings-BmJI-gam.js +1 -0
  51. package/dist/assets/settings-CqFe8Jtz.js +1 -0
  52. package/dist/assets/settings-DeM0wvCG.js +1 -0
  53. package/dist/assets/settings-DijFr-kZ.js +1 -0
  54. package/dist/assets/settings-L9mLQIIP.js +1 -0
  55. package/dist/assets/{stores-B0SETQK4.js → stores-kaIFQfXo.js} +1 -1
  56. package/dist/assets/{useWebSocket-DCx7NrvL.js → useWebSocket-DjrFK4tQ.js} +6 -6
  57. package/dist/assets/vector-memory-panel-CjqIA8Vf.js +1 -0
  58. package/dist/assets/ws-client-BVq0hf0a.js +1 -0
  59. package/dist/components/MemoryManager/MemorySearchBreakdown.d.ts +14 -0
  60. package/dist/components/MemoryManager/useMemoryManagerState.d.ts +7 -0
  61. package/dist/components/vector-memory-panel/model.d.ts +16 -0
  62. package/dist/hooks/useWebSocket.d.ts +5 -0
  63. package/dist/index.html +11 -11
  64. package/dist/index.js +2557 -2059
  65. package/dist/lib/ws-client-actions.d.ts +10 -0
  66. package/dist/lib/ws-client-utils.d.ts +7 -6
  67. package/dist/lib/ws-client.d.ts +12 -0
  68. package/dist/types/client-message.d.ts +7 -0
  69. package/dist/types/connections.d.ts +10 -0
  70. package/dist/types/sage.d.ts +28 -0
  71. package/dist/types/server-message.d.ts +6 -3
  72. package/package.json +8 -8
  73. package/dist/assets/MemoryManager-CetsTR6O.js +0 -1
  74. package/dist/assets/PromptJournalView-0F-HTGHg.js +0 -1
  75. package/dist/assets/index-BRs425Ir.css +0 -1
  76. package/dist/assets/settings-4A6zNjep.js +0 -1
  77. package/dist/assets/settings-Bq1PPj3V.js +0 -1
  78. package/dist/assets/settings-BxL8m0v6.js +0 -1
  79. package/dist/assets/settings-CZR4viP9.js +0 -1
  80. package/dist/assets/settings-CbtB0i7o.js +0 -1
  81. package/dist/assets/settings-L8hBHrGD.js +0 -1
  82. package/dist/assets/settings-uLdezc9e.js +0 -1
  83. package/dist/assets/vector-memory-panel-D1zQSMIW.js +0 -1
  84. package/dist/assets/ws-client-C2ppA8xa.js +0 -1
@@ -1 +0,0 @@
1
- var e=`Impostazioni`,t=`Configure every aspect of your agent workspace`,n={general:`Generale`,provider:`Provider`,connection:`Connessioni`,agent:`Agente`,execution:`Esecuzione`,fallbacks:`Fallback`,routing:`Routing`,fleet:`Flotta`,integrations:`Integrazioni`,chimera:`Chimera`,context:`Contesto`,logs:`Registri`,security:`Sicurezza`,display:`Visualizzazione`,displayDesc:`Aspetto del workbench, chip di stato, timer di refine e interruttori di iniezione di strumenti/memoria — riflette il SettingsPicker della TUI.`,generalDesc:`Aspetto, lingua e preferenze di visualizzazione — rispecchia il selettore impostazioni della TUI.`,providerDesc:`Chiavi API, provider salvati e catalogo dei provider.`,connectionDesc:`URL del server WebSocket e stato della connessione.`,agentDesc:`Autonomia, affinamento dei prompt, ragionamento e routing dei modelli.`,executionDesc:`Limiti di iterazione, comportamento di uscita e interruttore di processo.`,fallbacksDesc:`Catena di fallback dei modelli, preferiti e profili di fallback nominati.`,routingDesc:`Matrice di routing dei modelli per fase e per ruolo.`,fleetDesc:`Concorrenza dei subagent, streaming e previsione dei passi successivi.`,integrationsDesc:`Client HQ, server MCP e notifiche Telegram.`,chimeraDesc:`Configurazione dell'agente di revisione del codice post-sessione.`,contextDesc:`Flag di funzionalità, strategia del contesto, compattatore e controlli dei plugin.`,logsDesc:`Livello di registro, dettaglio di audit, ambito di accesso al filesystem e flusso di debug.`,securityDesc:`Controllo decisionale Brain, agente ombra e accesso agli strumenti.`},r={heading:`Modello`,loading:`Caricamento modelli...`,notFound:`Nessun modello trovato per questo provider. Il catalogo potrebbe essere vuoto o ancora in caricamento.`,selectProviderFirst:`Seleziona prima un provider`,context:`{{count}}k contesto`},i={wsUrlLabel:`URL del server WebSocket`,wsUrlPlaceholder:`ws://localhost:3456`,wsUrlHint:`URL del server WebSocket dell'agente. Il server viene eseguito insieme alla CLI.`,startingHeading:`Avviare il server WebSocket`,startingBody:`Per lo sviluppo, esegui ./dev.ps1 dalla root del repo (facoltativamente imposta prima WS_HOST/WS_PORT). Altrimenti avvia la WebUI con la CLI: wstack --webui.`,healthHeading:`Stato connessioni`,healthHint:`Rapporto live su proprietario, storage, coda, watcher e latenza dei servizi.`,healthRefresh:`Aggiorna`,healthLoading:`Controllo dei servizi…`,healthUnknown:`Stato sconosciuto`,healthDisconnected:`Il WebSocket della WebUI è disconnesso.`,healthRestartRequired:`Riavvia il backend una volta per attivare il rapporto connessioni.`,healthOptional:`Su richiesta`,endpointInvalidBadge:`percorso socket troppo lungo`,endpointInvalidRemedy:`Il percorso del socket IPC supera il limite di lunghezza di questa piattaforma, quindi il demone condiviso non può avviarsi. Le query tornano a una modalità locale di processo più lenta. Rimedio: impostare un TMPDIR più corto (es. export TMPDIR=/tmp) e riavviare WrongStack.`,healthCounts:`{{healthy}} sani · {{attention}} attenzione · {{sleeping}} inattivi`,healthOverall:{healthy:`Servizi richiesti sani`,degraded:`Servizio richiesto degradato`,error:`Servizio richiesto non disponibile`},healthStatus:{healthy:`Sano`,degraded:`Degradato`,offline:`Inattivo`,unavailable:`Non disponibile`,error:`Errore`},services:{kanban:{label:`Kanban IPC`},mailbox:{label:`Mailbox IPC`}},serviceActionRestart:`Riavvia {{label}}`,webuiTransport:`Trasporto WebUI`},a={savedProviderCount_one:`{{count}} provider`,savedProviderCount_other:`{{count}} provider`,keyCount_one:`{{count}} chiave configurata`,keyCount_other:`{{count}} chiavi configurate`,activeKeyCount_one:`{{count}} chiave attiva`,activeKeyCount_other:`{{count}} chiavi attive`,subscriptionHeading:`Accesso con abbonamento`,apiKeysHeading:`Provider con chiave API`,apiKeysBody:`Scegli un provider dal catalogo e aggiungi una chiave API, oppure gestisci i provider salvati.`,tabCatalog:`Catalogo`,tabSaved:`Salvati ({{count}})`,searchPlaceholder:`Cerca tra {{count}} provider (nome / id / famiglia)…`,loadingCatalog:`Caricamento catalogo...`,noMatch:`Nessun provider corrisponde a "{{query}}".`,configured:`Configurato`,reachable:`Raggiungibile`,envVar:`ENV: {{var}}`,modelCount_one:`{{count}} modello`,modelCount_other:`{{count}} modelli`,keyPlaceholder:`Chiave API {{name}}`,orEnv:`Oppure imposta {{env}} nell'ambiente.`,addApiKey:`Aggiungi chiave API`,manageKeys:`Gestisci le tue chiavi API e le configurazioni dei provider`,addProvider:`Aggiungi provider`,addCustomHeading:`Aggiungi provider personalizzato`,localServers:`Server locali — clicca per precompilare:`,providerIdPlaceholder:`ID provider (es. my-llm-server)`,apiKeyOptionalPlaceholder:`Chiave API (facoltativa)`,noSaved:`Nessun provider salvato`,noSavedHint:`Aggiungi un provider per iniziare`,apiKeysLabel:`Chiavi API`,addKey:`Aggiungi chiave`,noKeys:`Nessuna chiave configurata`,active:`Attiva`,setActive:`Imposta come attiva`,keyLabelPlaceholder:`Etichetta chiave (es. default, production)`,apiKeyPlaceholder:`Chiave API`,saveKey:`Salva chiave`,savedToast:`Chiave salvata per {{name}}`},o={addCustom:`Aggiungi modello personalizzato`,addCustomTitle:`Aggiungi modello personalizzato`,addFromCatalog:`Aggiungi dal catalogo`,catalogSearchPlaceholder:`Cerca nel catalogo models.dev…`,catalogSearchTitle:`Cerca nel catalogo models.dev`,colActions:`Azioni`,colCaps:`Capacità`,colContext:`Contesto`,colCost:`Costo`,colModalities:`Modalità`,colModel:`Modello`,colOutput:`Output`,colSource:`Origine`,editModel:`Modifica modello`,emptyState:`Nessun modello per ora — aggiungi dal catalogo o crea un modello personalizzato.`,fieldContext:`Finestra di contesto`,fieldCostInput:`Costo di input`,fieldCostOutput:`Costo di output`,fieldDescription:`Descrizione`,fieldFamily:`Famiglia`,fieldInputLimit:`Limite di input`,fieldInputModalities:`Modalità di input`,fieldLastUpdated:`Ultimo aggiornamento`,fieldName:`Nome`,fieldOutput:`Output massimo`,fieldOutputModalities:`Modalità di output`,fieldReleaseDate:`Data di rilascio`,modelAdded:`{{model}} aggiunto`,modelRemoved:`{{model}} rimosso`,modelSaved:`{{model}} salvato`,noResults:`Nessun modello trovato`,removeModel:`Rimuovi modello`,sectionCapabilities:`Flag delle capacità`,sectionDates:`Date`,sectionIdentity:`Identità`,sectionLimits:`Limiti`,sectionModalities:`Modalità`,sectionPricing:`Prezzi (per 1M di token, USD)`,tabForm:`Modulo`,tabRawJson:`JSON grezzo`,typeToSearch:`Digita per cercare…`,useModel:`Usa {{model}}`,usingModel:`Utilizzo di {{model}}`,filterPlaceholder:`Filtra modelli…`},s={status:{connected:`Connesso`,connecting:`Connessione`,sleeping:`In pausa`,discovering:`Rilevamento`,error:`Errore`,stopped:`Fermo`,unknown:`Sconosciuto`},disabled:`I server MCP sono disabilitati.`,wakeTitle:`Riattiva server`,sleepTitle:`Metti in pausa`,discoverTitle:`Scopri strumenti`,editTitle:`Modifica`,removeTitle:`Rimuovi`,statusLabel:`Stato:`,enabledLabel:`Attivo:`,yes:`Sì`,no:`No`,descriptionLabel:`Descrizione:`,pidLabel:`PID:`,errorLabel:`Errore:`,toolsLabel:`Strumenti ({{count}}):`,noTools:`Nessuno strumento ancora scoperto`,serverNameRequired:`Il nome del server è obbligatorio`,dialogTitleEdit:`Modifica server MCP`,dialogTitleAdd:`Aggiungi server MCP`,dialogTitleAddCustom:`Aggiungi server MCP personalizzato`,fieldName:`Nome`,fieldNamePlaceholder:`es. github, filesystem`,fieldTransport:`Trasporto`,fieldUrl:`URL`,fieldCommand:`Comando`,fieldCommandPlaceholder:`es. npx`,fieldArgs:`Args`,fieldArgsHint:`(separati da spazi)`,fieldArgsPlaceholder:`es. -y @modelcontextprotocol/server-github`,fieldEnv:`Variabili d'env`,fieldEnvHint:`(KEY=valore, una per riga)`,fieldDescription:`Descrizione`,fieldDescriptionPlaceholder:`Server MCP GitHub per l'accesso al repository`,enableServer:`Abilita server`,lazyConnect:`Connessione pigra`,lazyConnectHint:`(non avviare fino alla prima chiamata; va in pausa quando inattivo)`,saveChanges:`Salva modifiche`,addServer:`Aggiungi server`,requires:`Richiede: {{vars}}`,added:`Aggiunto`,heading:`Server MCP`,summary:`{{connected}} connessi · {{sleeping}} in pausa · {{total}} totali`,addCustom:`Personalizzato`,tabRecommended:`Consigliati`,tabServers:`Server`,tabAddCustom:`Personalizzato`,recommendedBody:`Aggiunta con un clic per i server MCP popolari. Clicca Aggiungi per precompilare la configurazione, poi conferma. I server che richiedono credenziali avranno bisogno delle variabili d'env prima dell'uso.`,loadingServers:`Caricamento server...`,noServers:`Nessun server MCP configurato`,noServersHint:`Passa alla scheda Consigliati per aggiungere server popolari, oppure Personalizzato per i tuoi.`,addCustomBody:`Configura un server MCP personalizzato con trasporto stdio, SSE o HTTP.`,addCustomBodyHint:`Per i server popolari usa invece la scheda Consigliati — è tutto preconfigurato.`,removeConfirmTitle:`Rimuovere il server "{{name}}"?`,removeConfirmBody:`Questo rimuove il server MCP dalla tua configurazione.`,toastAdded:`Server "{{name}}" aggiunto`,toastRemoved:`Server "{{name}}" rimosso`,toastDiscovered:`Scoperti {{count}} strumenti da "{{name}}"`,toastSleeping:`Il server "{{name}}" è in pausa`,toastConnected:`Server "{{name}}" connesso`,toastReconnected:`Server "{{name}}" riconnesso`,toastDisconnected:`Server "{{name}}" disconnesso: {{reason}}`,toastError:`Server "{{name}}" errore: {{error}}`},c={title:`Cancella l'allowlist salvata?`,body_one:`Questo rimuoverà il modello fissato per {{provider}}. Il selettore modelli tornerà al catalogo models.dev.`,body_other:`Questo rimuoverà i {{count}} modelli fissati per {{provider}}. Il selettore modelli tornerà al catalogo models.dev.`,undoHint:`Puoi annullare per 8 secondi dopo la conferma.`,keepTitle:`Mantieni allowlist (Esc)`,clearTitle:`Cancella allowlist (Invio)`,clear:`Cancella allowlist`},l={termsWarning:`Accedi con un abbonamento invece di una chiave API. Usare un abbonamento al di fuori del suo client ufficiale può violare i Termini del provider — il tuo account potrebbe essere rate-limited o bannato. Una chiave API è la via sanzionata per uso programmatico.`,signIn:`Accedi`,waitingBrowser:`In attesa del tuo accesso…`,openSignIn:`Apri pagina di accesso`,pasteLoopbackBusy:`Porta loopback occupata — incolla l'URL di reindirizzamento`,pasteCantReach:`Il browser non raggiunge questo server? Incolla l'URL di reindirizzamento`,submit:`Invia`,enterCode:`Inserisci questo codice nella pagina di verifica:`,openVerification:`Apri pagina di verifica`,waitingCode:`In attesa di autorizzazione…`,exchanging:`Scambio token…`,fetchingModels:`Recupero modelli…`,signedIn:`Accesso effettuato.`,signedInToast:`Accesso effettuato — {{provider}}`,signInFailed:`Accesso fallito`,accountCount_one:`{{count}} account salvato`,accountCount_other:`{{count}} account salvati`,active:`Attivo`,inactive:`Inattivo`,retry:`Riprova`,retryLogin:`Ri-autentica questo account`,newAccount:`Nuovo account`,aliasPlaceholder:`es. {{default}}`},u={showThinkingLabel:`Mostra i registri di ragionamento`,showThinkingHint:`Mostra i blocchi di ragionamento completati nella cronologia della chat.`,groupToolCallsLabel:`Raggruppa le chiamate agli strumenti`,groupToolCallsHint:`Raggruppa le chiamate consecutive agli strumenti in un unico indicatore.`,themeHeading:`Tema`,themeLight:`Chiaro`,themeDark:`Scuro`,themeSystem:`Sistema`,themeSystemHint:`Sistema segue la tua preferenza chiaro/scuro a livello di sistema operativo.`,preferencesHeading:`Preferenze`,compactDensity:`Densità compatta`,compactDensityHint:`Spaziatura più stretta in tutta la chat.`,soundOnComplete:`Suono al completamento`,soundOnCompleteHint:`Riproduci un leggero suono al termine di un'esecuzione.`,titleAnimation:`Animazione del titolo`,titleAnimationHint:`Mostra il titolo animato del terminale nella CLI.`,thinkingWordLabel:`Parola di ragionamento (CLI/TUI)`,thinkingWordHint:`Parola mostrata nel chip di stato della TUI. Una sola parola breve.`,statuslineModeLabel:`Modalità barra di stato (CLI/TUI)`,statuslineModeHint:`Densità della barra di stato della TUI.`,statuslineModeDetailed:`Dettagliata`,statuslineModeMinimum:`Minima`,statuslineModeNoColor:`Senza colore`,animationStyleLabel:`Stile di animazione (CLI/TUI)`,animationStyleHint:`Animazione del chip di lavoro della TUI.`,animationStyleRainbow:`Arcobaleno`,animationStyleWave:`Onda`,animationStylePulse:`Impulso`,animationStyleDots:`Punti`,animationStyleBreathe:`Respiro`,animationStyleCycle:`Ciclo`,languageHeading:`Lingua`,languageLabel:`Lingua dell'interfaccia`,languageHint:`Modifica solo il testo dell'interfaccia. I prompt, le skill e l'output del modello non sono interessati.`,paletteHeading:`Paletta colori`,paletteSwitcherTitle:`Paletta colori`,paletteHint:`Scegli il colore principale (e le sue varianti). Le superfici neutre restano invariate.`,paletteSignal:`Segnale`,paletteEmeraldGold:`Smeraldo e oro`,paletteBlueNavy:`Blu notte`,palettePurplePink:`Viola e rosa`,paletteCyanTeal:`Ciano e turchese`,paletteRoseCopper:`Rosa e rame`,paletteIndigoAmber:`Indaco e ambra`,paletteSageSand:`Salvia e sabbia`,paletteSlateViolet:`Ardesia e violetto`,paletteCoralMint:`Corallo e menta`,paletteArcticEmber:`Artico e brace`,paletteMossRust:`Muschio e ruggine`},d={autonomyHeading:`Autonomia e Comportamento`,autonomyModeLabel:`Modalità autonomia`,autonomyModeHint:`Quanto indipendentemente l'agent procede tra i turni.`,autonomyModeOff:`Off — controllo manuale completo`,autonomyModeSuggest:`Suggerisci — suggerisce i passaggi successivi`,autonomyModeAuto:`Auto — breve ritardo di conferma`,autonomyModeEternal:`Eterno — autonomo fino al completamento dell'obiettivo`,autonomyModeEternalParallel:`Eterno Parallelo — flotta multi-agente`,autoProceedDelayLabel:`Ritardo auto-procedere`,autoProceedDelayHint:`Millisecondi prima che l'agent proceda automaticamente in modalità Auto. 0 = immediato.`,yoloLabel:`Modalità YOLO`,yoloHint:`Ignora i prompt di conferma degli strumenti — l'agent gira senza chiedere.`,refineHeading:`Affinamento Prompt`,enableRefineLabel:`Abilita affinamento`,enableRefineHint:`Riscrivi i prompt prima dell'invio — istruzioni più chiare, risultati migliori.`,refineDelayLabel:`Ritardo affinamento`,refineDelayHint:`Countdown prima dell'invio automatico del prompt affinato.`,refineLanguageLabel:`Lingua affinamento`,refineLanguageHint:`Mantieni la tua lingua o traduci in inglese per il modello.`,refineLanguageOriginal:`Originale — mantieni la tua lingua`,refineLanguageEnglish:`Inglese — traduci in inglese`,refinerProviderLabel:`Provider di affinamento`,refinerProviderHint:`Id del provider per l'affinamento degli obiettivi. Vuoto = usa il provider della sessione.`,refinerProviderDefault:`Provider della sessione`,refinerModelLabel:`Modello di affinamento`,refinerModelHint:`Id del modello per l'affinamento degli obiettivi. Vuoto = usa il modello della sessione.`,refinerModelDefault:`Modello della sessione`,refinerProfileLabel:`Profilo di fallback per l'affinamento`,refinerProfileHint:`Profilo di fallback con nome per l'affinamento degli obiettivi. Sostituisce provider e modello.`,refinerProfileDefault:`Nessuno — usa provider e modello o i valori predefiniti della sessione`,reasoningHeading:`Ragionamento e Cache`,reasoningModeLabel:`Modalità ragionamento`,reasoningModeHint:`Controlla come il modello usa il pensiero esteso. Auto = default del provider.`,reasoningModeAuto:`Auto — default del provider`,reasoningModeOn:`On — forza pensiero`,reasoningModeOff:`Off — disabilita pensiero`,reasoningEffortLabel:`Sforzo di ragionamento`,reasoningEffortHint:`Quanto compute il modello spende per pensare. Inviato solo se il modello lo supporta.`,reasoningEffortNone:`Nessuno`,reasoningEffortMinimal:`Minimale`,reasoningEffortLow:`Basso`,reasoningEffortMedium:`Medio`,reasoningEffortHigh:`Alto`,reasoningEffortXhigh:`Molto alto`,reasoningEffortMax:`Max`,preserveThinkingLabel:`Preserva pensiero`,preserveThinkingHint:`Mantieni i blocchi di ragionamento tra i turni per la continuità del contesto.`,cacheTtlLabel:`TTL Cache`,cacheTtlHint:`Time-to-live della cache dei prompt. 1h costa di più in scrittura ma risparmia nelle riletture (Anthropic).`,cacheTtlDefault:`Default — default del provider`,cacheTtl5m:`5 minuti`,cacheTtl1h:`1 ora`,capsHint:`Usa wstack models caps per controllare cosa supporta il modello attuale. Le impostazioni non supportate sono omesse silenziosamente per richiesta.`,routingHeading:`Routing dei modelli`,routingRouteKey:`Chiave rotta modello`,routingPhasesGroup:`Fasi`,routingRolesGroup:`Ruoli {{label}}`,routingCustomGroup:`Route personalizzate esistenti`,routingTargetAria:`Destinazione della route del modello`,routingTargetEmpty:`— Cancella route —`,routingTargetProfilesGroup:`Profili di fallback`,routingTargetModelsGroup:`Modelli (provider/modello)`,routingSet:`Imposta`,routingReasoningModeAria:`Modalità ragionamento nuova rotta`,routingReasoningEffortAria:`Sforzo ragionamento nuova rotta`,routingReasoningPreserveAria:`Preservazione ragionamento nuova rotta`,routingReasoningModeFor:`Modalità ragionamento per {{key}}`,routingReasoningEffortFor:`Sforzo ragionamento per {{key}}`,routingReasoningPreserveFor:`Preservazione ragionamento per {{key}}`,noRoutes:`Nessuna rotta di modello ancora.`,leaderModel:`modello leader`,autonomyDelayMsLabel:`Ritardo di avanzamento automatico`,autonomyDelayMsHint:`Millisecondi prima che l'agente proceda automaticamente in modalità Auto. 0 = immediato.`,refineCountdownLabel:`Conto alla rovescia affinamento`,refineCountdownHint:`Periodo di grazia prima dell'invio automatico del prompt affinato (millisecondi).`},f={heading:`Esecuzione`,maxIterationsLabel:`Iterazioni max per run`,maxIterationsHint:`Limite rigido di turni LLM per agent.run().`,autoProceedMaxIterationsLabel:`Iterazioni max auto-procedere`,autoProceedMaxIterationsHint:`Ferma l'auto-procedere dopo N iterazioni. 0 = illimitato.`,confirmExitLabel:`Conferma prima di uscire`,confirmExitHint:`Primo Ctrl+C annulla il lavoro, secondo conferma l'uscita.`,chimeLabel:`Suono al completamento`,chimeHint:`Campanello del terminale quando un run dell'agent finisce.`,breakerLabel:`Interruttore di processo`,breakerHint:`Blocca bash/exec dopo errori ripetuti; lo scatto avvia il conto alla rovescia kill/reset.`,breakerTimeoutLabel:`Timeout kill/reset dell'interruttore`,breakerTimeoutHint:`Ritardo prima del kill/reset automatico allo scatto. 0 = ripristino manuale.`,availabilityHeading:`Provider/model availability calendar`,availabilityHint:`Prevent autonomous and overnight runs from using selected providers or models during recurring windows.`},p={heading:`Modelli fallback / round-robin`,body:`Quando il modello attivo è rate-limited (429/529), in errore 5xx o bloccato — dopo i suoi retry — l'agent ruota al modello successivo in questa catena. Anche usato come default per i sub-agent worker SDD.`,autoFallbackLabel:`Fallback automatico`,autoFallbackHint:`Quando la catena sopra è vuota, derivane una automaticamente dai tuoi provider con chiave.`,favoritesOnlyLabel:`Solo preferiti`,favoritesOnlyHint:`Quando il fallback automatico deriva una catena, limitala ai tuoi modelli preferiti.`,profilesHeading:`Profili fallback / round-robin`,addProfile:`Aggiungi`,noProfiles:`Nessun profilo di fallback con nome ancora.`,createDefault:`Crea default dal modello attivo`,useChain:`Usa catena`,setLeader:`Imposta leader`,profileEmpty:`Il profilo è vuoto.`,favoritesHeading:`Modelli preferiti`,favoritesEmpty:`I preferiti sono mostrati prima e possono vincolare il fallback automatico.`,addModelToProfile:`Aggiungi modello al profilo…`,addFavoriteModel:`Aggiungi modello preferito…`,inactive:`non attivo`},m={heading:`Flotta e Streaming`,fleetChatVerbosityLabel:`Stream eventi flotta`,fleetChatVerbosityHint:`Mostra l'attività live dei sub-agent nel pannello flotta.`,maxConcurrentLabel:`Sub-agent simultanei max`,maxConcurrentHint:`Numero massimo di sub-agent che possono girare simultaneamente.`,nextPredictionLabel:`Predizione prossimo passo`,nextPredictionHint:`Dopo un turno, predici i probabili passi successivi.`,nextStepsToolLabel:`Strumento nextsteps`,nextStepsToolHint:`Consente allo strumento di registrare i suggerimenti con una chiamata invece di scrivere il blocco a mano. Attivo dalla prossima sessione.`},h={hqHeading:`Client HQ`,hqPublishingLabel:`Pubblicazione HQ`,hqPublishingHint:`Pubblica questa sessione WebUI/client su WrongStack HQ. I client della stessa macchina possono auto-scoprire l'auth HQ locale; i client remoti usano URL/token sotto.`,hqUrlLabel:`URL HQ`,hqUrlHint:`Lascia vuoto per auto-scoperta su stessa macchina.`,hqTokenLabel:`Token client HQ`,hqRawContentLabel:`Contenuto HQ grezzo`,hqRawContentHint:`Invia anteprime di contenuto grezze a HQ invece di anteprime censurate.`,telegramHeading:`Notifiche Telegram`,telegramSessionEndLabel:`Fine sessione`,telegramSessionEndHint:`Invia un riepilogo quando una sessione finisce.`,telegramDelegateLabel:`Delegato terminato`,telegramDelegateHint:`Invia una nota umanizzata quando un sub-agent completa.`,telegramLongToolLabel:`Strumenti lunghi`,telegramLongToolHint:`Notifica quando uno strumento supera {{ms}}ms. 0 per disabilitare.`,telegramChangesApply:`Le modifiche si applicano immediatamente.`,telegramNotConfigured:`Telegram non è configurato. Esegui /telegram-setup nella CLI per collegare prima un bot.`,heading:`Integrations`,disabledHint:`Abilita la funzione nella scheda Contesto per usare questa sezione.`},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`,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:`Profilo fallback / round-robin`,autoReviewFallbackProfileHint:`Profilo modelli per l’auto-review; fornisce il pool di fallback e i modelli per round-robin o selezione casuale.`,autoReviewFallbackProfileNone:`None — use provider+model or session defaults`,autoReviewModelSelectionLabel:`Selezione profilo`,autoReviewModelSelectionHint:`Sceglie il modello successivo in ordine o un modello iniziale casuale per ogni revisione.`,autoReviewModelSelectionRoundRobin:`Round-robin — ordine del profilo`,autoReviewModelSelectionRandom:`Casuale — scegli dal profilo`,autoReviewFallbackModelsLabel:`Modelli fallback / round-robin`,autoReviewFallbackModelsEmpty:`Nessun modello fallback / round-robin configurato`,autoReviewFallbackModelsHint:`Modelli dal profilo o dalla catena globale; formano il pool di selezione e la catena di nuovo tentativo.`,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:`Flag di Funzionalità`,mcpLabel:`Server MCP`,mcpHint:`Abilita le integrazioni Model Context Protocol.`,pluginsLabel:`Plugin`,pluginsHint:`Carica ed esegui i plugin installati dall'utente.`,memoryLabel:`Memoria`,memoryHint:`Persisti e richiama fatti tra le sessioni.`,skillsLabel:`Competenze`,skillsHint:`Carica prompt di competenze specifici del dominio.`,modelsRegistryLabel:`Registro modelli`,modelsRegistryHint:`Usa il catalogo models.dev per la scoperta dei provider.`,indexOnStartLabel:`Indicizza all'avvio`,indexOnStartHint:`Costruisci l'indice dei simboli del codebase all'avvio della sessione.`,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:`Contesto e Debug`,autoCompactLabel:`Compatta contesto auto`,autoCompactHint:`Riduci automaticamente la finestra di contesto vicino ai limiti.`,compactorStrategyLabel:`Strategia compattazione`,compactorStrategyHint:`Come il contesto viene compattato quando cresce troppo.`,compactorStrategyHybrid:`Ibrida — regole veloci (predefinito)`,compactorStrategyIntelligent:`Intelligente — sintesi LLM`,compactorStrategySelective:`Selettiva — selezione guidata LLM`,contextModeLabel:`Modalità contesto`,contextModeHint:`Politica della finestra di contesto — bilanciato è il predefinito.`,contextModeBalanced:`Bilanciato — uso normale del contesto`,contextModeFrugal:`Frugale — uso conservativo di token`,contextModeDeep:`Profondo — contesto più ampio per attività complesse`,tokenSavingLabel:`Modalità risparmio token`,tokenSavingHint:`Controlla gli schemi diretti e il prompt di sistema della prossima sessione.`,tokenSavingAuto:`Auto — adatta il prompt alla finestra del modello`,tokenSavingOff:`Off — nessun risparmio`,tokenSavingMinimal:`Minimale — ottimizzazione di base`,tokenSavingLight:`Leggero — riduzione moderata`,tokenSavingMedium:`Medio — risparmi significativi`,tokenSavingAggressive:`Aggressivo — superficie diretta e prompt minimi`},v={logLevelLabel:`Livello di log`,logLevelHint:`Severità minima per il logging lato server.`,logLevelDebug:`Debug — tutto`,logLevelInfo:`Info — flusso normale`,logLevelWarn:`Warn — solo problemi`,logLevelError:`Error — solo fallimenti`,auditLevelLabel:`Livello di audit`,auditLevelHint:`Livello di dettaglio per i log di audit di sessione.`,auditLevelMinimal:`Minimale — solo errori`,auditLevelStandard:`Standard — chiamate strumenti + errori`,auditLevelFull:`Completo — ogni evento (log grandi)`,fsAccessLabel:`Accesso al filesystem`,fsAccessHint:`Ambito degli strumenti file. Si applica dalla prossima sessione.`,fsAccessUnrestricted:`Illimitato — qualsiasi percorso`,fsAccessProject:`Progetto — limitato alla radice del progetto`,debugStreamLabel:`Stream di debug`,debugStreamHint:`Dump esadecimale SSE grezzo su stderr del server per il debug dei provider.`,heading:`Logs & Debug`},y={heading:`Security & Monitoring`,brainHeading:`🧠 Brain — Controllo delle decisioni`,brainHint:`Modelli decisionali, council, escalation e tetto di rischio — applicati subito e salvati nella configurazione globale.`,shadowHeading:`👁 Agente ombra — Monitor della flotta`,shadowHint:`L'agente ombra monitora tutti gli agenti della flotta, ne traccia le attività e rileva le anomalie.`,toolsHeading:`🔧 Tool Access Control`,toolsHint:`Abilita o disabilita i singoli strumenti. Gli strumenti che modificano sono evidenziati in ambra.`,breakerHeading:`Process Circuit Breaker`,breakerHint:`Blocca bash/exec dopo errori ripetuti; lo scatto avvia il conto alla rovescia di arresto/ripristino.`},b={switchingTo:`Passaggio a {{provider}} / {{model}}…`,switching:`Cambio del modello…`,switchingToTarget:`Passaggio a {{target}}…`,previousModel:`modello precedente`,modelSwitchedNextRequest:`Modello cambiato: {{from}} → {{to}}. Attivo dalla prossima richiesta LLM.`,modelSwitchedRunActive:`Modello cambiato: {{from}} → {{to}}. Attivo dalla prossima richiesta LLM; l’esecuzione corrente continua senza riavviarsi.`,fallbackExists:`Il profilo di fallback "{{name}}" esiste già`,selectProviderModelFirst:`Seleziona prima un provider e un modello`,defaultProfileCreated:`Profilo di fallback predefinito creato`,profileEmpty:`Il profilo di fallback "{{name}}" è vuoto`,leaderSetFrom:`Leader impostato da {{name}}`,modelSwitchTimeout:`Cambio modello scaduto. Per favore riprova.`},x={workbenchHeading:`Aspetto del workbench`,workbenchHint:`Attiva/disattiva la visibilità delle superfici del workbench nella vista chat.`,showModelReasoningLabel:`Mostra ragionamento del modello`,showModelReasoningHint:`Renderizza i blocchi di ragionamento/thinking del LLM nella cronologia chat (parità TUI).`,showAgentSwarmPanelLabel:`Pannello agent swarm`,showAgentSwarmPanelHint:`Controlla dove viene visualizzato il pannello agent swarm (fleet + coda missioni).`,swarmPanelBottom:`Pannello inferiore`,swarmPanelSidebar:`Barra laterale destra`,swarmPanelOff:`Disattivato`,titleAnimationLabel:`Animazione del titolo`,titleAnimationHint:`Anima il titolo di terminale/tab con lo stato di esecuzione (parità TUI).`,statusChipHeading:`Chip di stato e barra di stato`,statusChipHint:`Stile visivo per la barra di stato TUI/CLI e il chip di lavoro.`,thinkingWordLabel:`Parola di ragionamento`,thinkingWordHint:`Singola parola breve mostrata nel chip di stato TUI mentre l’agente lavora.`,statuslineModeLabel:`Modalità barra di stato`,statuslineModeHint:`Densità della barra di stato TUI.`,statuslineModeMinimum:`Minima`,statuslineModeDetailed:`Dettagliata`,statuslineModeNoColor:`Senza colore`,animationStyleLabel:`Stile di animazione`,animationStyleHint:`Animazione del chip di lavoro TUI.`,animationStyleRainbow:`Arcobaleno`,animationStyleWave:`Onda`,animationStylePulse:`Impulso`,animationStyleDots:`Punti`,animationStyleBreathe:`Respiro`,animationStyleCycle:`Ciclo`,refineHeading:`Conto alla rovescia del refine e diff`,refineHint:`Configura il conto alla rovescia pre-refine e la soglia del piè di pagina del riepilogo multi-diff.`,preRefineSecondsLabel:`Conto alla rovescia pre-refine`,preRefineSecondsHint:`Periodo di grazia prima dell’avvio del refiner (secondi). 0 = salta il conto alla rovescia e raffina subito.`,preRefineSecondsPresets:`Predefiniti: {{presets}} secondi (0 = disattivato).`,multiDiffSummaryLabel:`Riepilogo multi-diff`,multiDiffSummaryHint:`Numero minimo di file prima che il piè di pagina aggregato 'N file · +X -Y' appaia sopra i blocchi per file.`,multiDiffSummaryPresets:`Predefiniti: {{presets}} (0 = disattivato).`,memoryHeading:`Strumento read e iniezione di memoria SAGE`,memoryHint:`Attiva cosa include lo strumento read e quando i blocchi di memoria SAGE compaiono nei risultati degli strumenti.`,readSymbolsLabel:`Leggi simboli`,readSymbolsHint:`Quando attivo, lo strumento read include i simboli dell’indice del codice insieme al contenuto del file.`,showSageMemoryInjectLabel:`Mostra SAGE Memory Inject`,showSageMemoryInjectHint:`Quando attivo, mostra i blocchi di iniezione di memoria SAGE nei risultati degli strumenti.`,sageMemoryInjectThresholdLabel:`Soglia SAGE Memory Inject`,sageMemoryInjectThresholdHint:`Forza minima di relazione richiesta per una memoria SAGE iniettata (0.72–0.95).`,footnote:`Queste impostazioni riflettono il picker /settings della TUI. Gli interruttori si applicano subito; alcuni campi richiedono il riavvio della sessione.`,sageRelaxed:`0,72 (permissivo)`,sageDefault:`0,85 (predefinito)`,sageStrict:`0,95 (rigoroso)`},S=`Ripristina`,C=`Annulla`,w=`Ripristinare tutte le preferenze?`,T=`Ripristina le impostazioni predefinite e ricarica la pagina.`,E=`Ripristina`,D=JSON.parse(`{"heading":"Brain","headingHint":"Modelli di decisione, consiglio, escalation e tetto di rischio — applicati in tempo reale, salvati nella configurazione globale.","riskHeading":"Tetto di autonomia","escalationHeading":"Escalation","escalationModeLabel":"Modalità","escalationModeHint":"Headless: il Brain non blocca mai su un umano — le escalation senza risposta si risolvono con la policy terminale sicura. Vale per le sessioni CLI/TUI; il Brain WebUI autonomo è sempre headless.","escalationDecisionTimeoutLabel":"Timeout decisione","escalationDecisionTimeoutHint":"Budget di tempo per chiamata LLM per una decisione del Brain.","escalationHumanTimeoutLabel":"Timeout risposta umana","escalationHumanTimeoutHint":"Modalità interattiva: quanto può attendere un prompt di escalation prima che la policy terminale lo risolva.","escalationTerminalPolicyLabel":"Policy terminale","escalationTerminalPolicyHint":"Come si risolve un'escalation headless senza umano disponibile. Conservativa accetta un'opzione raccomandata a rischio basso/medio; nega-tutto non accetta mai automaticamente; continua-su-raccomandazione accetta un'opzione raccomandata a QUALSIASI rischio.","escalationDecisionLogSizeLabel":"Dimensione registro decisioni","escalationDecisionLogSizeHint":"Registro decisionale in memoria rotativo conservato per la vista di stato.","rulesHeading":"Regole deterministiche","rulesConfigured":"{{count}} configurate","rulesBody":"Valutate prima di ogni chiamata al provider — vince la prima corrispondenza. Modificale nel file di configurazione globale; questa vista è in sola lettura.","rulesOff":"spenta","rulesDropped":"{{count}} regola/e scartata/e","heuristicsHeading":"Euristiche","heuristicsBody":"Congetture di pattern gratuite che risolvono una domanda prima che un modello venga eseguito. Tutte attive per impostazione predefinita — spegni quella la cui congettura è sbagliata per il tuo carico di lavoro.","heuristicsLowRiskLabel":"Risposta automatica a basso rischio","heuristicsLowRiskHint":"Risponde automaticamente alle richieste a basso rischio che hanno già un'opzione raccomandata.","heuristicsBlockedLabel":"Bloccato-risolto","heuristicsBlockedHint":"'blocked …' più un marcatore di risoluzione esplicito nel contesto risolve in continua.","heuristicsDeadlockLabel":"Salta stallo","heuristicsDeadlockHint":"'deadlock' più unità di lavoro fallite nel contesto risolve in salta e continua.","heuristicsRetryLabel":"Riprovi esauriti","heuristicsRetryHint":"'failed'/'retry' più ripetizioni chiaramente esaurite marca l'unità come fallita e prosegue.","heuristicsPingLabel":"Ping di continuazione","heuristicsPingHint":"Un semplice ping continua/procedi senza alternative in competizione risolve in continua.","heuristicsMarkers":"Marcatori: {{markers}}","qualityHeading":"Qualità LLM","qualityCircuit_one":"circuito {{state}} · {{count}} errore","qualityCircuit_other":"circuito {{state}} · {{count}} errori","qualityResponseBudgetLabel":"Budget di risposta","qualityResponseBudgetHint":"Token di output per chiamata di decisione. Una risposta del Brain è una decisione più una motivazione di una frase.","qualityRejectLabel":"Rifiuta risposte incerte","qualityRejectHint":"Tratta una risposta rifiutata o vuota come 'questo livello non ha potuto decidere' invece di accettarla come risposta.","qualityMinConfidenceLabel":"Confidenza minima","qualityMinConfidenceHint":"Rifiuta le risposte la cui confidenza auto-dichiarata è inferiore. Le risposte senza confidenza dichiarata passano sempre.","qualityDenyTerminalLabel":"Il rifiuto è terminale","qualityDenyTerminalHint":"Se un rifiuto del livello LLM singolo termina la decisione. 'when-decided' rende terminale un vero rifiuto mentre i guasti infrastrutturali escalano comunque.","traceHeading":"Traccia di replay","traceRecordLabel":"Registra tracce di decisione","traceRecordHint":"JSONL per decisione di ogni livello, obiettivo di pool e voto del consiglio, con tempi e uso token. Disattivato di default — attivarlo scrive il contenuto delle decisioni su disco.","traceContentLabel":"Contenuto traccia","traceContentHint":"'full' conserva domanda e contesto (necessario per riprodurre una decisione); 'redacted' tronca il testo libero; 'none' registra solo i metadati.","cacheHeading":"Cache decisionale","cacheStats":"{{hits}} successi / {{misses}} mancati · {{size}} attivi","cacheReplayLabel":"Riproduci verdetti identici","cacheReplayHint":"Riutilizza un precedente verdetto consiglio/LLM per una domanda identica ripetuta. I livelli deterministici e chiedi-a-un-umano non vengono mai memorizzati; una decisione che il registro osserva fallita viene espulsa.","cacheLifetimeLabel":"Durata voci","cacheLifetimeHint":"Per quanto tempo un verdetto in cache resta riproducibile.","cacheMaxEntriesLabel":"Voci massime","cacheMaxEntriesHint":"Limite sui verdetti in cache attivi.","monitorHeading":"Monitor","monitorBody":"Auto-attivazione da segnali di sofferenza. Il monitor viene costruito una volta all'avvio, quindi queste impostazioni valgono per la prossima sessione anziché in tempo reale.","monitorWatchLabel":"Osserva i segnali di sofferenza","monitorWatchHint":"Serie di errori di strumenti, tempeste di errori, stalli degli agenti e churn di file attivano il Brain da soli.","monitorPolicyLabel":"Policy dei segnali","monitorPolicyHint":"Come si risolve un segnale rilevato. 'llm' consulta il Brain; 'steer' interviene sempre e 'observe' mai — entrambi senza chiamata al provider.","modelsHeading":"Modelli di decisione","modelsSessionBadge":"modello di sessione","modelsResolvedBadge":"{{resolved}}/{{total}} risolti","modelsUseSessionLabel":"Usa il modello di sessione","modelsUseSessionHint":"Decidi con il modello che la sessione sta eseguendo. Spegni aggiungendo modelli sotto.","modelsAddModel":"Aggiungi modello","modelsPoolStrategyLabel":"Strategia di pool","modelsPoolStrategyHint":"Fallback: il primo modello è primario, gli altri vengono provati in ordine al fallimento. Round-robin: le decisioni ruotano nel pool.","councilHeading":"Consiglio","councilConvened":"convocato","councilDisabled":"disattivato","councilEnableLabel":"Abilita consiglio multi-LLM","councilEnableHint":"Le domande ad alto rischio vengono votate da seggi indipendenti (esecutore / scettico-con-veto / revisore) invece che da un solo modello. Richiede ≥2 votanti risolvibili (seggi espliciti sotto, o un pool di ≥2 modelli).","councilSeatsDerived":"Seggi derivati dal pool: {{seats}}","councilCustomLens":"Lente di decisione personalizzata — inviata al seggio tale e quale.","councilCustomOption":"{{persona}} (personalizzato)","councilVeto":"veto","councilAddVoter":"Aggiungi votante","councilRiskFloorLabel":"Pavimento di rischio","councilRiskFloorHint":"Rischio minimo della domanda che convoca il consiglio invece del livello mono-modello.","councilJudge":"Giudice","councilJudgeDesc":"Modello di spareggio che vede la motivazione di ogni voto.","councilResolved":"risolto: {{model}}","councilAlsoVoter":"⚠ anche votante","councilAuto":"auto","councilPick":"Scegli…","councilAutoReset":"Auto","councilQuorumLabel":"Quorum","councilQuorumHint":"Frazione di seggi che deve restituire un voto valido.","councilApprovalLabel":"Approvazione","councilApprovalHint":"Frazione del peso dei voti espressi che l'opzione vincente deve superare.","councilPerSeatTimeoutLabel":"Timeout per seggio","councilPerSeatTimeoutHint":"Budget di tempo per il voto di un singolo seggio. Più lento del timeout di decisione significa che un seggio bloccato trattiene il voto.","councilMaxConcurrencyLabel":"Concorrenza massima","councilMaxConcurrencyHint":"Quanti seggi votano in parallelo. Riduci quando il pool condivide un provider con limiti di velocità.","councilDistinctnessLabel":"Distinzione seggi","councilDistinctnessHint":"Rifiuta seggi duplicati: 'model' richiede modelli distinti, 'provider' provider indipendenti così un guasto non può far pendere il voto.","councilVoterBudgetLabel":"Budget di risposta votante","councilVoterBudgetHint":"Token di output per chiamata di seggio — i modelli di ragionamento spendono i token di pensiero da questo budget.","councilJudgeBudgetLabel":"Budget di risposta giudice","councilJudgeBudgetHint":"Token di output per la chiamata del giudice di spareggio.","councilSeatTemplate":"Modello di seggio:","ledgerHeading":"Registro decisionale","ledgerRecordLabel":"Registra decisioni + risultati","ledgerRecordHint":"Persiste ogni decisione e il suo risultato osservato; risultati passati simili vengono reimmessi nei prompt futuri del Brain.","ledgerAutoDenyLabel":"Auto-rifiuto dopo fallimenti","ledgerAutoDenyHint":"Rifiuta in modo deterministico (senza LLM) dopo che questo numero di approvazioni consecutive di un gruppo di decisioni è terminato in fallimenti osservati.","ledgerMemoryEntriesLabel":"Voci in memoria","ledgerMemoryEntriesHint":"Dimensione dell'anello in memoria e numero di voci passate caricate dal disco all'avvio.","ledgerRetryWindowLabel":"Finestra di nuovo intervento","ledgerRetryWindowHint":"Un intervento del monitor dello stesso tipo che si riattiva in questa finestra marca la precedente guida come fallita.","recentHeading":"Decisioni recenti ({{count}})","recentEmpty":"Nessuna decisione registrata in questa sessione.","optInteractive":"Interattivo (chiedimi)","optHeadless":"Headless (non chiedere mai)","optConservative":"Conservativo (predefinito)","optDenyAll":"Nega tutto","optContinueRecommended":"Continua su raccomandazione","optNeverDefault":"Mai (predefinito)","optWhenDecided":"Quando deciso","optAlways":"Sempre","optFullDefault":"Completo (predefinito)","optRedacted":"Oscurato","optMetadataOnly":"Solo metadati","optConsultBrain":"Consulta il Brain (predefinito)","optAlwaysSteer":"Guida sempre","optObserveOnly":"Solo osservazione","optFallback":"Fallback","optRoundRobin":"Round-robin","optMediumPlus":"Medio+","optHighPlus":"Alto+","optCriticalOnly":"Solo critico","optNoneDefault":"Nessuno (predefinito)","optDistinctModels":"Modelli distinti","optDistinctProviders":"Provider distinti","optDefault3":"Predefinito (3)","optOff":"Spento","pickPoolTitle":"Aggiungi modello al pool Brain","pickPoolHint":"Pool decisionale ordinato — il primo è primario.","pickVoterTitle":"Aggiungi votante al consiglio","pickVoterHint":"La finestra resta aperta — aggiungi ≥2 votanti, poi chiudi.","pickJudgeTitle":"Scegli il giudice del consiglio","pickJudgeHint":"Spareggio che vede ogni voto.","persistError":"Impostazioni applicate in tempo reale ma non salvate.","riskCopy":{"off":"Un umano decide tutto","low":"Decidi automaticamente solo il basso rischio","medium":"Decidi automaticamente fino al rischio medio","high":"Decidi automaticamente fino al rischio alto","all":"Decidi automaticamente tutto"},"rulesConfigured_one":"{{count}} configurata","rulesConfigured_other":"{{count}} configurate"}`),O={default15s:`Predefinito (15 s)`,waitForever:`Attendi per sempre`,defaultHalf:`Predefinito (0,5)`,all:`Tutti`,n200Default:`200 (predefinito)`,offDefault:`Disattivato (predefinito)`,n20Default:`20 (predefinito)`,m5Default:`5 min (predefinito)`,default:`Predefinito`,oneSerial:`1 (seriale)`,default500:`Predefinito (500)`,default10m:`Predefinito (10 min)`},k={capToolCall:`Chiamata a strumento`,capReasoning:`Ragionamento`,capTemperature:`Temperatura`,capAttachment:`Allegato`,capStructuredOutput:`Output strutturato`,capOpenWeights:`Pesi aperti`},A={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};export{d as agent,c as allowlist,D as brain,O as brainOpt,C as cancel,i as connection,_ as context,A as default,x as display,f as execution,p as fallbacks,g as features,m as fleet,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=`Ayarlar`,t=`Configure every aspect of your agent workspace`,n={general:`Genel`,provider:`Sağlayıcı`,connection:`Bağlantılar`,agent:`Vekil`,execution:`Yürütme`,fallbacks:`Yedekler`,routing:`Yönlendirme`,fleet:`Filo`,integrations:`Entegrasyonlar`,chimera:`Chimera`,context:`Bağlam`,logs:`Günlükler`,security:`Güvenlik`,display:`Görünüm`,displayDesc:`Çalışma alanı görünümü, durum çipi, refine zamanlayıcıları ve araç/bellek enjeksiyonu anahtarları — TUI SettingsPicker ile aynı.`,generalDesc:`Görünüm, dil ve görüntü tercihleri — TUI Ayarlar seçicisini yansıtır.`,providerDesc:`API anahtarları, kayıtlı sağlayıcılar ve sağlayıcı kataloğu.`,connectionDesc:`WebSocket sunucu adresi ve bağlantı durumu.`,agentDesc:`Otonomi, istem iyileştirme, akıl yürütme ve model yönlendirme.`,executionDesc:`Yineleme sınırları, çıkış davranışı ve süreç devre kesici.`,fallbacksDesc:`Model yedek zinciri, favoriler ve adlandırılmış yedek profiller.`,routingDesc:`Aşama ve rol başına model yönlendirme matrisi.`,fleetDesc:`Alt vekil eşzamanlılığı, akış ve sonraki adım tahmini.`,integrationsDesc:`HQ istemcisi, MCP sunucuları ve Telegram bildirimleri.`,chimeraDesc:`Oturum sonrası kod inceleme ajanı yapılandırması.`,contextDesc:`Özellik bayrakları, bağlam stratejisi, sıkıştırıcı ve eklenti denetimleri.`,logsDesc:`Günlük düzeyi, denetim ayrıntısı, dosya sistemi erişim kapsamı ve hata ayıklama akışı.`,securityDesc:`Beyin karar kontrolü, gölge ajan ve araç erişimi.`},r={heading:`Model`,loading:`Modeller yükleniyor...`,notFound:`Bu sağlayıcı için model bulunamadı. Katalog boş olabilir veya hâlâ yükleniyor olabilir.`,selectProviderFirst:`Önce bir sağlayıcı seçin`,context:`{{count}}k bağlam`},i={wsUrlLabel:`WebSocket Sunucu URL'si`,wsUrlPlaceholder:`ws://localhost:3456`,wsUrlHint:`Vekil WebSocket sunucusunun URL'si. Sunucu CLI ile birlikte çalışır.`,startingHeading:`WebSocket Sunucusunu Başlatma`,startingBody:`Geliştirme için repo kökünden ./dev.ps1 çalıştırın (isteğe bağlı olarak önce WS_HOST/WS_PORT ayarlayın). Aksi hâlde WebUI'yi CLI ile başlatın: wstack --webui.`,healthHeading:`Bağlantı sağlığı`,healthHint:`Proje servislerinin sahiplik, depolama, kuyruk, izleyici ve gecikme raporu.`,healthRefresh:`Yenile`,healthLoading:`Servisler denetleniyor…`,healthUnknown:`Sağlık bilinmiyor`,healthDisconnected:`WebUI WebSocket bağlantısı kesik.`,healthRestartRequired:`Bağlantı sağlık raporunu etkinleştirmek için backend'i bir kez yeniden başlatın.`,healthOptional:`İsteğe bağlı`,endpointInvalidBadge:`socket yolu çok uzun`,endpointInvalidRemedy:`IPC soket yolu bu platformun uzunluk sınırını aştığı için paylaşılan arka plan hizmeti başlatılamıyor. Sorgular daha yavaş bir işlem-yerel moduna düşüyor. Çözüm: daha kısa bir TMPDIR ayarlayın (ör. export TMPDIR=/tmp) ve WrongStack'i yeniden başlatın.`,healthCounts:`{{healthy}} sağlıklı · {{attention}} dikkat · {{sleeping}} uykuda`,healthOverall:{healthy:`Zorunlu servisler sağlıklı`,degraded:`Zorunlu servis zayıflamış`,error:`Zorunlu servis kullanılamıyor`},healthStatus:{healthy:`Sağlıklı`,degraded:`Zayıflamış`,offline:`Uykuda`,unavailable:`Kullanılamıyor`,error:`Hata`},services:{kanban:{label:`Kanban IPC`},mailbox:{label:`Mailbox IPC`}},serviceActionRestart:`Yeniden başlat {{label}}`,webuiTransport:`WebUI taşıması`},a={subscriptionHeading:`Abonelik girişi`,apiKeysHeading:`API anahtarı sağlayıcıları`,apiKeysBody:`Katalogdan bir sağlayıcı seçip API anahtarı ekleyin veya kayıtlı sağlayıcıları yönetin.`,tabCatalog:`Katalog`,tabSaved:`Kayıtlı ({{count}})`,searchPlaceholder:`{{count}} sağlayıcıda ara (ad / kimlik / aile)…`,loadingCatalog:`Katalog yükleniyor...`,noMatch:`"{{query}}" ile eşleşen sağlayıcı yok.`,configured:`Yapılandırıldı`,reachable:`Erişilebilir`,envVar:`ENV: {{var}}`,modelCount_one:`{{count}} model`,modelCount_other:`{{count}} model`,keyPlaceholder:`{{name}} API anahtarı`,orEnv:`Veya bunun yerine ortamda {{env}} ayarlayın.`,addApiKey:`API anahtarı ekle`,manageKeys:`API anahtarlarınızı ve sağlayıcı yapılandırmalarınızı yönetin`,addProvider:`Sağlayıcı Ekle`,addCustomHeading:`Özel Sağlayıcı Ekle`,localServers:`Yerel sunucular — doldurmak için tıklayın:`,providerIdPlaceholder:`Sağlayıcı kimliği (örn. my-llm-server)`,apiKeyOptionalPlaceholder:`API Anahtarı (isteğe bağlı)`,noSaved:`Henüz kayıtlı sağlayıcı yok`,noSavedHint:`Başlamak için bir sağlayıcı ekleyin`,apiKeysLabel:`API Anahtarları`,savedProviderCount_one:`{{count}} sağlayıcı`,savedProviderCount_other:`{{count}} sağlayıcı`,keyCount_one:`{{count}} anahtar yapılandırıldı`,keyCount_other:`{{count}} anahtar yapılandırıldı`,activeKeyCount_one:`{{count}} etkin anahtar`,activeKeyCount_other:`{{count}} etkin anahtar`,addKey:`Anahtar Ekle`,noKeys:`Yapılandırılmış anahtar yok`,active:`Etkin`,setActive:`Etkin Yap`,keyLabelPlaceholder:`Anahtar etiketi (örn. default, production)`,apiKeyPlaceholder:`API anahtarı`,saveKey:`Anahtarı Kaydet`,savedToast:`{{name}} için anahtar kaydedildi`},o={addCustom:`Özel model ekle`,addCustomTitle:`Özel model ekle`,addFromCatalog:`Katalogdan ekle`,catalogSearchPlaceholder:`models.dev kataloğunda ara…`,catalogSearchTitle:`models.dev kataloğunda ara`,colActions:`İşlemler`,colCaps:`Yetenekler`,colContext:`Bağlam`,colCost:`Maliyet`,colModalities:`Modaliteler`,colModel:`Model`,colOutput:`Çıktı`,colSource:`Kaynak`,editModel:`Modeli düzenle`,emptyState:`Henüz model yok — katalogdan ekleyin veya özel bir model oluşturun.`,fieldContext:`Bağlam penceresi`,fieldCostInput:`Girdi maliyeti`,fieldCostOutput:`Çıktı maliyeti`,fieldDescription:`Açıklama`,fieldFamily:`Aile`,fieldInputLimit:`Girdi limiti`,fieldInputModalities:`Girdi modaliteleri`,fieldLastUpdated:`Son güncelleme`,fieldName:`Ad`,fieldOutput:`Maks. çıktı`,fieldOutputModalities:`Çıktı modaliteleri`,fieldReleaseDate:`Yayın tarihi`,modelAdded:`{{model}} eklendi`,modelRemoved:`{{model}} kaldırıldı`,modelSaved:`{{model}} kaydedildi`,noResults:`Model bulunamadı`,removeModel:`Modeli kaldır`,sectionCapabilities:`Yetenek bayrakları`,sectionDates:`Tarihler`,sectionIdentity:`Kimlik`,sectionLimits:`Sınırlar`,sectionModalities:`Modaliteler`,sectionPricing:`Fiyatlandırma (1M token başına, USD)`,tabForm:`Form`,tabRawJson:`Ham JSON`,typeToSearch:`Aramak için yazın…`,useModel:`{{model}} kullan`,usingModel:`{{model}} kullanılıyor`,filterPlaceholder:`Modelleri filtrele…`},s={status:{connected:`Bağlandı`,connecting:`Bağlanıyor`,sleeping:`Uyuyor`,discovering:`Keşfediliyor`,error:`Hata`,stopped:`Durduruldu`,unknown:`Bilinmiyor`},disabled:`MCP sunucuları devre dışı.`,wakeTitle:`Sunucuyu uyandır`,sleepTitle:`Sunucuyu uyut`,discoverTitle:`Araçları keşfet`,editTitle:`Düzenle`,removeTitle:`Kaldır`,statusLabel:`Durum:`,enabledLabel:`Etkin:`,yes:`Evet`,no:`Hayır`,descriptionLabel:`Açıklama:`,pidLabel:`PID:`,errorLabel:`Hata:`,toolsLabel:`Araçlar ({{count}}):`,noTools:`Henüz araç keşfedilmedi`,serverNameRequired:`Sunucu adı zorunludur`,dialogTitleEdit:`MCP Sunucusunu Düzenle`,dialogTitleAdd:`MCP Sunucusu Ekle`,dialogTitleAddCustom:`Özel MCP Sunucusu Ekle`,fieldName:`Ad`,fieldNamePlaceholder:`örn., github, filesystem`,fieldTransport:`Aktarım`,fieldUrl:`URL`,fieldCommand:`Komut`,fieldCommandPlaceholder:`örn., npx`,fieldArgs:`Argümanlar`,fieldArgsHint:`(boşlukla ayrılmış)`,fieldArgsPlaceholder:`örn., -y @modelcontextprotocol/server-github`,fieldEnv:`Ortam değişkenleri`,fieldEnvHint:`(KEY=değer, satır başına bir tane)`,fieldDescription:`Açıklama`,fieldDescriptionPlaceholder:`Depo erişimi için GitHub MCP sunucusu`,enableServer:`Sunucuyu etkinleştir`,lazyConnect:`Tembel bağlan`,lazyConnectHint:`(ilk araç çağrısına kadar başlatma; boştayken otomatik uyur)`,saveChanges:`Değişiklikleri Kaydet`,addServer:`Sunucu Ekle`,requires:`Gerektirir: {{vars}}`,added:`Eklendi`,heading:`MCP Sunucuları`,summary:`{{connected}} bağlı · {{sleeping}} uyuyor · {{total}} toplam`,addCustom:`Özel Ekle`,tabRecommended:`Önerilen`,tabServers:`Sunucular`,tabAddCustom:`Özel Ekle`,recommendedBody:`Popüler MCP sunucularını tek tıkla ekleyin. Yapılandırmayı öndoldurmak için Ekle'ye tıklayın, sonra onaylayın. Kimlik bilgisi gerektiren sunucuların kullanımdan önce ortam değişkenleri ayarlanmalıdır.`,loadingServers:`Sunucular yükleniyor...`,noServers:`Yapılandırılmış MCP sunucusu yok`,noServersHint:`Popüler sunucular eklemek için Önerilen sekmesine, kendi sunucunuz için Özel Ekle'ye geçin.`,addCustomBody:`stdio, SSE veya HTTP aktarımıyla özel bir MCP sunucusu yapılandırın.`,addCustomBodyHint:`Popüler sunucular için bunun yerine Önerilen sekmesini kullanın — her şey sizin için önceden yapılandırılmıştır.`,removeConfirmTitle:`"{{name}}" sunucusu kaldırılsın mı?`,removeConfirmBody:`Bu, MCP sunucusunu yapılandırmanızdan kaldırır.`,toastAdded:`"{{name}}" sunucusu eklendi`,toastRemoved:`"{{name}}" sunucusu kaldırıldı`,toastDiscovered:`"{{name}}" sunucusundan {{count}} araç keşfedildi`,toastSleeping:`"{{name}}" sunucusu artık uyuyor`,toastConnected:`"{{name}}" sunucusu bağlandı`,toastReconnected:`"{{name}}" sunucusu yeniden bağlandı`,toastDisconnected:`"{{name}}" sunucusu bağlantısı koptu: {{reason}}`,toastError:`"{{name}}" sunucusu hatası: {{error}}`},c={title:`Kayıtlı izin listesi temizlensin mi?`,body_one:`Sabitlenen model {{provider}} için kaldırılacak. Model seçici models.dev kataloğuna geri dönecek.`,body_other:`{{count}} sabitlenen model {{provider}} için kaldırılacak. Model seçici models.dev kataloğuna geri dönecek.`,undoHint:`Onayladıktan sonra 8 saniye boyunca geri alabilirsiniz.`,keepTitle:`İzin listesini tut (Esc)`,clearTitle:`İzin listesini temizle (Enter)`,clear:`İzin listesini temizle`},l={termsWarning:`Bir API anahtarı yerine abonelikle oturum açın. Aboneliği resmi istemcisi dışında kullanmak sağlayıcının Şartlarını ihlal edebilir — hesabınız hız sınırına takılabilir veya yasaklanabilir. API anahtarı programatik kullanım için onaylı yoldur.`,signIn:`Oturum aç`,waitingBrowser:`Oturum açmanız bekleniyor…`,openSignIn:`Oturum açma sayfasını aç`,pasteLoopbackBusy:`Loopback portu meşgul — yönlendirme URL'sini yapıştırın`,pasteCantReach:`Tarayıcı bu sunucuya ulaşamıyor mu? Yönlendirme URL'sini yapıştırın`,submit:`Gönder`,enterCode:`Bu kodu doğrulama sayfasına girin:`,openVerification:`Doğrulama sayfasını aç`,waitingCode:`Yetkilendirme bekleniyor…`,exchanging:`Tokenlar değiştiriliyor…`,fetchingModels:`Modeller getiriliyor…`,signedIn:`Oturum açıldı.`,signedInToast:`Oturum açıldı — {{provider}}`,signInFailed:`Oturum açma başarısız`,accountCount_one:`{{count}} hesap kayıtlı`,accountCount_other:`{{count}} hesap kayıtlı`,active:`Aktif`,inactive:`Pasif`,retry:`Yeniden dene`,retryLogin:`Bu hesabı yeniden doğrula`,newAccount:`Yeni hesap`,aliasPlaceholder:`örn. {{default}}`},u={themeHeading:`Tema`,themeLight:`Açık`,themeDark:`Koyu`,themeSystem:`Sistem`,themeSystemHint:`Sistem, işletim sistemi düzeyindeki açık/koyu tercihinizi izler.`,preferencesHeading:`Tercihler`,compactDensity:`Sıkışık yoğunluk`,compactDensityHint:`Sohbet boyunca daha dar aralıklar.`,soundOnComplete:`Tamamlanınca ses çal`,soundOnCompleteHint:`Bir çalışma bitince hafif bir çan sesi çal.`,titleAnimation:`Başlık animasyonu`,titleAnimationHint:`CLI'da animasyonlu terminal başlığını göster.`,thinkingWordLabel:`Düşünme kelimesi (CLI/TUI)`,thinkingWordHint:`TUI durum çipinde gösterilen kelime. Tek kısa bir kelime.`,statuslineModeLabel:`Durum satırı modu (CLI/TUI)`,statuslineModeHint:`TUI durum satırının yoğunluğu.`,statuslineModeDetailed:`Ayrıntılı`,statuslineModeMinimum:`Asgari`,statuslineModeNoColor:`Renksiz`,animationStyleLabel:`Animasyon stili (CLI/TUI)`,animationStyleHint:`TUI çalışma durumu çipinin animasyonu.`,animationStyleRainbow:`Gökkuşağı`,animationStyleWave:`Dalga`,animationStylePulse:`Nabız`,animationStyleDots:`Noktalar`,animationStyleBreathe:`Nefes`,animationStyleCycle:`Döngü`,showThinkingLabel:`Düşünme kayıtlarını göster`,showThinkingHint:`Tamamlanan akıl yürütme bloklarını sohbet geçmişinde görüntüle.`,groupToolCallsLabel:`Araç çağrılarını grupla`,groupToolCallsHint:`Ardışık araç çağrılarını tek bir çipte topla.`,languageHeading:`Dil`,languageLabel:`Arayüz dili`,languageHint:`Yalnızca arayüz metnini değiştirir. Promptlar, beceriler ve model çıktısı etkilenmez.`,paletteHeading:`Renk paleti`,paletteSwitcherTitle:`Renk paleti`,paletteHint:`Ana rengi (ve türevlerini) seçin. Nötr yüzeyler aynı kalır.`,paletteSignal:`Sinyal`,paletteEmeraldGold:`Zümrüt & Altın`,paletteBlueNavy:`Lacivert`,palettePurplePink:`Mor & Pembe`,paletteCyanTeal:`Camgöbeği & Deniz Mavisi`,paletteRoseCopper:`Gül & Bakır`,paletteIndigoAmber:`Çivit Mavisi & Kehribar`,paletteSageSand:`Adaçayı & Kum`,paletteSlateViolet:`Lacivert & Menekşe`,paletteCoralMint:`Mercan & Nane`,paletteArcticEmber:`Kuzey & Ateş`,paletteMossRust:`Çim & Pas`},d={autonomyHeading:`Otonomi ve Davranış`,autonomyModeLabel:`Otonomi modu`,autonomyModeHint:`Ajanın turlar arasında ne kadar bağımsız ilerlediği.`,autonomyModeOff:`Kapalı — tam manuel kontrol`,autonomyModeSuggest:`Öner — sonraki adımları önerir`,autonomyModeAuto:`Otomatik — kısa onay gecikmesi`,autonomyModeEternal:`Sonsuz — hedef bitene kadar otonom`,autonomyModeEternalParallel:`Sonsuz Paralel — çok-ajanlı filo`,autoProceedDelayLabel:`Otomatik ilerleme gecikmesi`,autoProceedDelayHint:`Otomatik modda ajan otomatik ilerlemeden önceki milisaniye. 0 = anında.`,yoloLabel:`YOLO modu`,yoloHint:`Araç onay istemlerini atla — ajan sormadan çalışır.`,refineHeading:`İstem İyileştirme`,enableRefineLabel:`İyileştirmeyi etkinleştir`,enableRefineHint:`Göndermeden önce istemleri yeniden yazar — daha net talimatlar, daha iyi sonuçlar.`,refineDelayLabel:`İyileştirme gecikmesi`,refineDelayHint:`İyileştirilmiş istem otomatik gönderilmeden önceki geri sayım.`,refineLanguageLabel:`İyileştirme dili`,refineLanguageHint:`Dilinizi koruyun veya model için İngilizceye çevirin.`,refineLanguageOriginal:`Orijinal — dilinizi koruyun`,refineLanguageEnglish:`İngilizce — İngilizceye çevir`,refinerProviderLabel:`İyileştirici sağlayıcı`,refinerProviderHint:`Hedef iyileştirme için sağlayıcı. Yapılandırılmış sağlayıcılarınızdan seçin.`,refinerProviderDefault:`Oturum sağlayıcısı`,refinerModelLabel:`İyileştirici model`,refinerModelHint:`Hedef iyileştirme için model. Önce bir iyileştirici sağlayıcı seçilmelidir.`,refinerModelDefault:`Oturum modeli`,refinerProfileLabel:`İyileştirici yedek profili`,refinerProfileHint:`Hedef iyileştirme için adlandırılmış yedek profili. Sağlayıcı+modeli geçersiz kılar.`,refinerProfileDefault:`Yok — sağlayıcı+model veya oturum varsayılanlarını kullan`,reasoningHeading:`Akıl Yürütme ve Önbellek`,reasoningModeLabel:`Akıl yürütme modu`,reasoningModeHint:`Modelin genişletilmiş düşünmeyi nasıl kullandığını kontrol edin. Otomatik = sağlayıcı varsayılanı.`,reasoningModeAuto:`Otomatik — sağlayıcı varsayılanı`,reasoningModeOn:`Açık — düşünmeyi zorla`,reasoningModeOff:`Kapalı — düşünmeyi kapat`,reasoningEffortLabel:`Akıl yürütme çabası`,reasoningEffortHint:`Modelin düşünmeye harcadığı işlem gücü. Yalnızca model desteklediğinde gönderilir.`,reasoningEffortNone:`Yok`,reasoningEffortMinimal:`Minimal`,reasoningEffortLow:`Düşük`,reasoningEffortMedium:`Orta`,reasoningEffortHigh:`Yüksek`,reasoningEffortXhigh:`Çok Yüksek`,reasoningEffortMax:`Maks`,preserveThinkingLabel:`Düşünmeyi koru`,preserveThinkingHint:`Bağlam sürekliliği için akıl yürütme bloklarını turlar arasında tut.`,cacheTtlLabel:`Önbellek TTL`,cacheTtlHint:`İstem önbelleği yaşam süresi. 1h yazmada pahalıdır ama tekrarlanan okumalarda tasarruf sağlar (Anthropic).`,cacheTtlDefault:`Varsayılan — sağlayıcı varsayılanı`,cacheTtl5m:`5 dakika`,cacheTtl1h:`1 saat`,capsHint:`Mevcut modelin ne desteklediğini kontrol etmek için wstack models caps kullanın. Desteklenmeyen ayarlar istek başına sessizce atlanır.`,routingHeading:`Model Yönlendirme`,routingRouteKey:`Model rotası anahtarı`,routingPhasesGroup:`Aşamalar`,routingRolesGroup:`{{label}} rolleri`,routingCustomGroup:`Özel mevcut rotalar`,routingTargetAria:`Model rota hedefi`,routingTargetEmpty:`— Rotayı temizle —`,routingTargetProfilesGroup:`Yedek Profilleri`,routingTargetModelsGroup:`Modeller (sağlayıcı/model)`,routingSet:`Ayarla`,routingReasoningModeAria:`Yeni rota akıl yürütme modu`,routingReasoningEffortAria:`Yeni rota akıl yürütme çabası`,routingReasoningPreserveAria:`Yeni rota akıl yürütme koruması`,routingReasoningModeFor:`{{key}} için akıl yürütme modu`,routingReasoningEffortFor:`{{key}} için akıl yürütme çabası`,routingReasoningPreserveFor:`{{key}} için akıl yürütme koruması`,noRoutes:`Henüz model rotası yok.`,leaderModel:`lider model`,autonomyDelayMsLabel:`Otomatik devam gecikmesi`,autonomyDelayMsHint:`Auto modunda ajanın otomatik devam etmeden önce bekleme süresi (milisaniye). 0 = anında.`,refineCountdownLabel:`İyileştirme geri sayımı`,refineCountdownHint:`İyileştirilmiş istemin otomatik gönderilmeden önceki bekleme süresi (milisaniye).`},f={heading:`Yürütme`,maxIterationsLabel:`Çalışma başına maks iterasyon`,maxIterationsHint:`agent.run() başına LLM turu için sabit sınır.`,autoProceedMaxIterationsLabel:`Otomatik ilerleme maks iterasyon`,autoProceedMaxIterationsHint:`N iterasyondan sonra otomatik ilerlemeyi durdur. 0 = sınırsız.`,confirmExitLabel:`Çıkıştan önce onayla`,confirmExitHint:`İlk Ctrl+C işi iptal eder, ikincisi çıkışı onaylar.`,chimeLabel:`Tamamlanmada ses`,chimeHint:`Bir ajan çalışması bittiğinde terminal zili.`,breakerLabel:`Süreç devre kesici`,breakerHint:`Tekrarlanan hatalardan sonra bash/exec engellenir; tetiklenince kill/reset geri sayımı başlar.`,breakerTimeoutLabel:`Devre kesici kill/reset süresi`,breakerTimeoutHint:`Tetiklenince otomatik kill/reset öncesi gecikme. 0 = manuel kurtarma.`,availabilityHeading:`Provider/model availability calendar`,availabilityHint:`Prevent autonomous and overnight runs from using selected providers or models during recurring windows.`},p={heading:`Fallback / round-robin modelleri`,body:`Aktif model hız sınırlarsa (429/529), 5xx hatası verirse veya takılırsa — kendi yeniden denemelerinden sonra — ajan bu zincirdeki bir sonraki modele geçer. Ayrıca SDD işçi alt-ajanları için varsayılan olarak kullanılır.`,autoFallbackLabel:`Otomatik yedek`,autoFallbackHint:`Yukarıdaki zincir boşsa, anahtarlı sağlayıcılarınızdan otomatik türet.`,favoritesOnlyLabel:`Sadece favoriler`,favoritesOnlyHint:`Otomatik yedek bir zincir türettiğinde, onu favori modellerinizle sınırlandır.`,profilesHeading:`Fallback / round-robin profilleri`,addProfile:`Ekle`,noProfiles:`Henüz adlandırılmış yedek profili yok.`,createDefault:`Aktif modelden varsayılan oluştur`,useChain:`Zinciri kullan`,setLeader:`Lideri ayarla`,profileEmpty:`Profil boş.`,favoritesHeading:`Favori Modeller`,favoritesEmpty:`Favoriler önce gösterilir ve otomatik yedeği kısıtlayabilir.`,addModelToProfile:`Profile modele ekle…`,addFavoriteModel:`Favori modele ekle…`,inactive:`devre dışı`},m={heading:`Filo ve Akış`,fleetChatVerbosityLabel:`Filo olaylarını akıt`,fleetChatVerbosityHint:`Filo panelinde canlı alt-ajan etkinliğini göster.`,maxConcurrentLabel:`Maks eşzamanlı alt-ajan`,maxConcurrentHint:`Aynı anda çalışabilecek maks alt-ajan sayısı.`,nextPredictionLabel:`Sonraki adım tahmini`,nextPredictionHint:`Bir tur tamamlandıktan sonra olası sonraki adımları tahmin et.`,nextStepsToolLabel:`Nextsteps aracı`,nextStepsToolHint:`Ajan, öneri bloğunu elle yazmak yerine bir araç çağrısıyla kaydedebilsin. Sonraki oturumda geçerli olur.`},h={hqHeading:`HQ İstemcisi`,hqPublishingLabel:`HQ yayınlama`,hqPublishingHint:`Bu WebUI/istemci oturumunu WrongStack HQ'ya yayınlayın. Aynı makine istemcileri yerel HQ kimlik doğrulamasını otomatik keşfedebilir; uzak istemciler aşağıdaki URL/tokenı kullanır.`,hqUrlLabel:`HQ URL`,hqUrlHint:`Aynı makine otomatik keşfi için boş bırakın.`,hqTokenLabel:`HQ istemci tokenı`,hqRawContentLabel:`Ham HQ içeriği`,hqRawContentHint:`HQ'ya sansürlenmiş önizlemeler yerine ham içerik önizlemeleri gönder.`,telegramHeading:`Telegram Bildirimleri`,telegramSessionEndLabel:`Oturum sonu`,telegramSessionEndHint:`Bir oturum bittiğinde özet gönder.`,telegramDelegateLabel:`Temsilci tamamlandı`,telegramDelegateHint:`Bir alt-ajan tamamlandığında insanlaştırılmış not gönder.`,telegramLongToolLabel:`Uzun süren araçlar`,telegramLongToolHint:`Bir araç {{ms}}ms aşarsa bildir. Devre dışı bırakmak için 0 ayarla.`,telegramChangesApply:`Değişiklikler hemen uygulanır.`,telegramNotConfigured:`Telegram yapılandırılmamış. Önce bir bot bağlamak için CLI'da /telegram-setup çalıştırın.`,heading:`Integrations`,disabledHint:`Bu bölümü kullanmak için Bağlam sekmesindeki ilgili özellik bayrağını etkinleştirin.`},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`,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 profili`,autoReviewFallbackProfileHint:`Otomatik inceleme için model profili; fallback havuzunu ve round-robin veya rastgele seçim modellerini sağlar.`,autoReviewFallbackProfileNone:`None — use provider+model or session defaults`,autoReviewModelSelectionLabel:`Profil seçimi`,autoReviewModelSelectionHint:`Sıradaki profil modelini veya her inceleme için rastgele bir başlangıç modelini seçer.`,autoReviewModelSelectionRoundRobin:`Round-robin — profil sırasıyla`,autoReviewModelSelectionRandom:`Rastgele — profilden seç`,autoReviewFallbackModelsLabel:`Fallback / round-robin modelleri`,autoReviewFallbackModelsEmpty:`Fallback / round-robin modeli yapılandırılmadı`,autoReviewFallbackModelsHint:`Profil veya global zincirdeki modeller; seçim havuzunu ve yeniden deneme zincirini oluşturur.`,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:`Özellik Bayrakları`,mcpLabel:`MCP sunucuları`,mcpHint:`Model Context Protocol entegrasyonlarını etkinleştir.`,pluginsLabel:`Eklentiler`,pluginsHint:`Kullanıcı tarafından yüklenen eklentileri yükle ve çalıştır.`,memoryLabel:`Bellek`,memoryHint:`Oturumlar arasında bilgileri kalıcı kıl ve hatırla.`,skillsLabel:`Beceriler`,skillsHint:`Alan özelinde beceri istemlerini yükle.`,modelsRegistryLabel:`Model kayıt defteri`,modelsRegistryHint:`Salayıcı keşfi için models.dev kataloğunu kullan.`,indexOnStartLabel:`Başlangıçta dizine ekle`,indexOnStartHint:`Oturum başlangıcında kod tabanı sembol dizinini oluştur.`,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:`Bağlam ve Hata Ayıklama`,autoCompactLabel:`Bağlamı otomatik sıkıştır`,autoCompactHint:`Sınırlara yakınken bağlam penceresini otomatik kırp.`,compactorStrategyLabel:`Sıkıştırma stratejisi`,compactorStrategyHint:`Bağlam çok büyüdüğünde nasıl sıkıştırılacağı.`,compactorStrategyHybrid:`Karma — hızlı kurallar (varsayılan)`,compactorStrategyIntelligent:`Akıllı — LLM özetleme`,compactorStrategySelective:`Seçici — LLM odaklı seçim`,contextModeLabel:`Bağlam modu`,contextModeHint:`Bağlam penceresi ilkesi — dengeli varsayılandır.`,contextModeBalanced:`Dengeli — normal bağlam kullanımı`,contextModeFrugal:`Tasarruflu — muhafazakar token kullanımı`,contextModeDeep:`Derin — karmaşık görevler için daha büyük bağlam`,tokenSavingLabel:`Token tasarrufu modu`,tokenSavingHint:`Sonraki oturumun doğrudan tool şemalarını ve system prompt boyutunu kontrol eder.`,tokenSavingAuto:`Otomatik — promptu model penceresine uyarla`,tokenSavingOff:`Kapalı — token tasarrufu yok`,tokenSavingMinimal:`Minimal — temel optimizasyon`,tokenSavingLight:`Hafif — orta derecede azaltma`,tokenSavingMedium:`Orta — önemli tasarruflar`,tokenSavingAggressive:`Agresif — en küçük doğrudan yüzey ve prompt`},v={logLevelLabel:`Günlük seviyesi`,logLevelHint:`Sunucu tarafı günlükleme için minimum şiddet.`,logLevelDebug:`Hata ayıkla — her şey`,logLevelInfo:`Bilgi — normal akış`,logLevelWarn:`Uyarı — sadece sorunlar`,logLevelError:`Hata — sadece başarısızlıklar`,auditLevelLabel:`Denetim seviyesi`,auditLevelHint:`Oturum denetim günlükleri için ayrıntı seviyesi.`,auditLevelMinimal:`Minimal — sadece hatalar`,auditLevelStandard:`Standart — araç çağrıları + hatalar`,auditLevelFull:`Tam — her olay (büyük günlükler)`,fsAccessLabel:`Dosya sistemi erişimi`,fsAccessHint:`Dosya araçlarının kapsamı. Bir sonraki oturumda geçerli olur.`,fsAccessUnrestricted:`Sınırsız — herhangi bir yol`,fsAccessProject:`Proje — proje köküyle sınırlı`,debugStreamLabel:`Hata ayıklama akışı`,debugStreamHint:`Sağlayıcı hata ayıklaması için sunucu stderr çıkışına ham SSE hex dökümü.`,heading:`Logs & Debug`},y={heading:`Security & Monitoring`,brainHeading:`🧠 Beyin — Karar Denetimi`,brainHint:`Karar modelleri, konsey, yükseltme ve risk tavanı — anında uygulanır, genel yapılandırmaya kaydedilir.`,shadowHeading:`👁 Gölge Ajan — Filo İzleyici`,shadowHint:`Gölge Ajan tüm filo ajanlarını izler, görevlerini takip eder ve anormallikleri saptar.`,toolsHeading:`🔧 Tool Access Control`,toolsHint:`Araçları tek tek etkinleştirin veya devre dışı bırakın. Değişiklik yapan araçlar amber renkle işaretlidir.`,breakerHeading:`Process Circuit Breaker`,breakerHint:`Tekrarlanan hatalardan sonra bash/exec erişimini kısıtla; devreye girmesi sonlandırma/sıfırlama geri sayımını başlatır.`},b={switchingTo:`{{provider}} / {{model}} modeline geçiliyor…`,switching:`Model değiştiriliyor…`,switchingToTarget:`{{target}} modeline geçiliyor…`,previousModel:`önceki model`,modelSwitchedNextRequest:`Model değiştirildi: {{from}} → {{to}}. Sonraki LLM isteğinde aktif olacak.`,modelSwitchedRunActive:`Model değiştirildi: {{from}} → {{to}}. Sonraki LLM isteğinde aktif olacak; mevcut çalışma devam eder ve yeniden başlatılmaz.`,fallbackExists:`"{{name}}" yedek profili zaten var`,selectProviderModelFirst:`Önce bir sağlayıcı ve model seçin`,defaultProfileCreated:`Varsayılan yedek profili oluşturuldu`,profileEmpty:`"{{name}}" yedek profili boş`,leaderSetFrom:`Lider {{name}} adından ayarlandı`,modelSwitchTimeout:`Model geçişi zaman aşamına uğradı. Lütfen tekrar deneyin.`},x={workbenchHeading:`Çalışma alanı görünümü`,workbenchHint:`Sohbet görünümünde çalışma alanı yüzeylerinin görünürlüğünü değiştirir.`,showModelReasoningLabel:`Model muhakemesini göster`,showModelReasoningHint:`Sohbet geçmişinde LLM muhakeme/düşünme bloklarını render eder (TUI uyumluluğu).`,showAgentSwarmPanelLabel:`Agent swarm paneli`,showAgentSwarmPanelHint:`Agent swarm (fleet + görev kuyruğu) panelinin nerede gösterileceğini kontrol eder.`,swarmPanelBottom:`Alt panel`,swarmPanelSidebar:`Sağ kenar çubuğu`,swarmPanelOff:`Kapalı`,titleAnimationLabel:`Başlık animasyonu`,titleAnimationHint:`Terminal/sekme başlığını çalışma durumuyla canlandırır (TUI uyumluluğu).`,statusChipHeading:`Durum çipi ve durum çubuğu`,statusChipHint:`TUI/CLI durum çubuğu ve çalışma çipi için görsel stil.`,thinkingWordLabel:`Düşünme kelimesi`,thinkingWordHint:`Ajan çalışırken TUI durum çipinde gösterilen tek kısa kelime.`,statuslineModeLabel:`Durum çubuğu modu`,statuslineModeHint:`TUI durum çubuğu yoğunluğu.`,statuslineModeMinimum:`Minimum`,statuslineModeDetailed:`Ayrıntılı`,statuslineModeNoColor:`Rensiz`,animationStyleLabel:`Animasyon stili`,animationStyleHint:`TUI çalışma çipinin animasyonu.`,animationStyleRainbow:`Gökkuşağı`,animationStyleWave:`Dalga`,animationStylePulse:`Nabız`,animationStyleDots:`Noktalar`,animationStyleBreathe:`Nefes`,animationStyleCycle:`Döngü`,refineHeading:`Refine geri sayımı ve diffler`,refineHint:`Refine öncesi bekleme süresini ve çoklu diff özet altbilgisi eşiğini yapılandırır.`,preRefineSecondsLabel:`Refine öncesi geri sayım`,preRefineSecondsHint:`Refiner başlamadan önceki bekleme süresi (saniye). 0 = geri sayımı atla ve hemen refine et.`,preRefineSecondsPresets:`Ön ayarlar: {{presets}} saniye (0 = kapalı).`,multiDiffSummaryLabel:`Çoklu diff özeti`,multiDiffSummaryHint:`Dosya başına blokların üzerinde toplu 'N dosya · +X -Y' altbilgisinin gösterilmesi için gereken minimum dosya sayısı.`,multiDiffSummaryPresets:`Ön ayarlar: {{presets}} (0 = kapalı).`,memoryHeading:`Read aracı ve SAGE bellek enjeksiyonu`,memoryHint:`Read aracının neleri içerdiğini ve SAGE bellek bloklarının araç sonuçlarında ne zaman görüneceğini değiştirir.`,readSymbolsLabel:`Sembolleri oku`,readSymbolsHint:`Açıkken, read aracı dosya içeriğinin yanı sıra kod tabanı dizin sembollerini de içerir.`,showSageMemoryInjectLabel:`SAGE Memory Inject göster`,showSageMemoryInjectHint:`Açıkken, SAGE bellek enjeksiyonu bloklarını araç sonuçlarında gösterir.`,sageMemoryInjectThresholdLabel:`SAGE Memory Inject eşiği`,sageMemoryInjectThresholdHint:`Enjekte edilen bir SAGE belleği için gereken minimum ilişki gücü (0.72–0.95).`,footnote:`Bu ayarlar TUI /settings seçiciyle aynıdır. Anahtarlar anında uygulanır; bazı alanlar oturum yeniden başlatması gerektirir.`,sageRelaxed:`0,72 (gevşek)`,sageDefault:`0,85 (varsayılan)`,sageStrict:`0,95 (katı)`},S=`Sıfırla`,C=`İptal`,w=`Tüm tercihler sıfırlansın mı?`,T=`Bu, varsayılan ayarları geri yükler ve sayfayı yeniler.`,E=`Sıfırla`,D=JSON.parse(`{"heading":"Beyin","headingHint":"Karar modelleri, konsey, yükseltme ve risk tavanı — canlı uygulanır, genel yapılandırmaya kaydedilir.","riskHeading":"Otonomi tavanı","escalationHeading":"Yükseltme","escalationModeLabel":"Mod","escalationModeHint":"Başsız: Beyin asla bir insanı beklemez — yanıtlanmayan yükseltmeler güvenli uç politika ile çözülür. CLI/TUI oturumları için geçerlidir; bağımsız WebUI Beyni her zaman başsızdır.","escalationDecisionTimeoutLabel":"Karar zaman aşımı","escalationDecisionTimeoutHint":"Tek bir Beyin kararı için LLM çağrısı başına süre bütçesi.","escalationHumanTimeoutLabel":"İnsan yanıt zaman aşımı","escalationHumanTimeoutHint":"Etkileşimli mod: bir yükseltme isteminin, uç politika çözmeden önce bekleyebileceği süre.","escalationTerminalPolicyLabel":"Uç politika","escalationTerminalPolicyHint":"Başsız bir yükseltmenin, uygun insan yokken nasıl çözüldüğü. Muhafazakâr, düşük/orta riskte önerilen bir seçeneği kabul eder; tümünü-reddet asla otomatik kabul etmez; önerilenle-devam HER riskte önerilen bir seçeneği kabul eder.","escalationDecisionLogSizeLabel":"Karar günlüğü boyutu","escalationDecisionLogSizeHint":"Durum görünümü için tutulan döngüsel bellek içi karar günlüğü.","rulesHeading":"Deterministik kurallar","rulesConfigured":"{{count}} yapılandırıldı","rulesBody":"Her sağlayıcı çağrısından önce değerlendirilir — ilk eşleşme kazanır. Bunları genel yapılandırma dosyasında düzenleyin; bu görünüm salt okunurdur.","rulesOff":"kapalı","rulesDropped":"{{count}} kural atlandı","heuristicsHeading":"Sezgisel kurallar","heuristicsBody":"Herhangi bir model çalışmadan önce bir soruyu çözen ücretsiz desen tahminleri. Varsayılan olarak hepsi açık — tahmini iş yükünüz için yanlış olanı kapatın.","heuristicsLowRiskLabel":"Düşük riskli otomatik yanıt","heuristicsLowRiskHint":"Zaten önerilen bir seçenek taşıyan düşük riskli istekleri otomatik yanıtla.","heuristicsBlockedLabel":"Engellendi-çözüldü","heuristicsBlockedHint":"'blocked …' artı bağlamdaki açık bir çözüm işareti devam olarak çözülür.","heuristicsDeadlockLabel":"Kilitlenmeyi atla","heuristicsDeadlockHint":"'deadlock' artı bağlamdaki başarısız iş birimleri atlayıp devam olarak çözülür.","heuristicsRetryLabel":"Yeniden deneme tükendi","heuristicsRetryHint":"'failed'/'retry' artı kanıtlanmış şekilde tükenmiş yeniden denemeler birimi başarısız işaretler ve devam eder.","heuristicsPingLabel":"Devam pingi","heuristicsPingHint":"Rakip alternatifi olmayan çıplak bir devam/ilerle pingi devam olarak çözülür.","heuristicsMarkers":"İşaretçiler: {{markers}}","qualityHeading":"LLM kalitesi","qualityCircuit_one":"devre {{state}} · {{count}} hata","qualityCircuit_other":"devre {{state}} · {{count}} hata","qualityResponseBudgetLabel":"Yanıt bütçesi","qualityResponseBudgetHint":"Karar çağrısı başına çıktı belirteci. Bir Beyin yanıtı, bir karar artı tek cümlelik bir gerekçedir.","qualityRejectLabel":"Belirsiz yanıtları reddet","qualityRejectHint":"Reddedilen veya boş bir yanıtı, yanıt olarak kabul etmek yerine 'bu katman karar veremedi' olarak değerlendir.","qualityMinConfidenceLabel":"Minimum güven","qualityMinConfidenceHint":"Kendi bildirdiği güveni bunun altında olan yanıtları reddet. Güven bildirmeyen yanıtlar her zaman geçer.","qualityDenyTerminalLabel":"Reddetme terminaldir","qualityDenyTerminalHint":"Tek-LLM katmanından gelen bir reddin kararı bitirip bitirmediği. 'when-decided' gerçek bir reddi terminal yapar; altyapı hataları yine de yükseltilir.","traceHeading":"Yeniden oynatma izi","traceRecordLabel":"Karar izlerini kaydet","traceRecordHint":"Her katman, havuz hedefi ve konsey oyu için zamanlama ve belirteç kullanımıyla birlikte karar başına JSONL. Varsayılan olarak kapalı — etkinleştirmek karar içeriğini diske yazar.","traceContentLabel":"İz içeriği","traceContentHint":"'full' soruyu ve bağlamı korur (kararı yeniden oynatmak için gerekir); 'redacted' serbest metni kısaltır; 'none' yalnızca meta veriyi kaydeder.","cacheHeading":"Karar önbelleği","cacheStats":"{{hits}} isabet / {{misses}} ıska · {{size}} canlı","cacheReplayLabel":"Aynı kararları yeniden oynat","cacheReplayHint":"Aynı tekrarlanan soru için önceki bir konsey/LLM kararını yeniden kullan. Deterministik katmanlar ve insana-sor asla önbelleğe alınmaz; günlüğün başarısız olduğunu gözlemlediği bir karar çıkarılır.","cacheLifetimeLabel":"Girdi ömrü","cacheLifetimeHint":"Önbelleğe alınmış bir kararın ne kadar süre yeniden oynatılabilir kaldığı.","cacheMaxEntriesLabel":"Maksimum girdi","cacheMaxEntriesHint":"Canlı önbelleğe alınmış karar sınırı.","monitorHeading":"İzleyici","monitorBody":"Sıkıntı sinyali kendi kendine etkinleştirme. İzleyici başlangıçta bir kez kurulur, bu yüzden bunlar canlı yerine sonraki oturuma uygulanır.","monitorWatchLabel":"Sıkıntı sinyallerini izle","monitorWatchHint":"Araç hata serileri, hata fırtınaları, ajan duraklamaları ve dosya hareketliliği Beyni kendi başına devreye sokar.","monitorPolicyLabel":"Sinyal politikası","monitorPolicyHint":"Algılanan bir sinyalin nasıl çözüldüğü. 'llm' Beyne danışır; 'steer' her zaman müdahale eder ve 'observe' asla etmez — ikisi de sağlayıcı çağrısı olmadan.","modelsHeading":"Karar modelleri","modelsSessionBadge":"oturum modeli","modelsResolvedBadge":"{{resolved}}/{{total}} çözüldü","modelsUseSessionLabel":"Oturum modelini kullan","modelsUseSessionHint":"Oturumun çalıştırdığı modelle karar ver. Aşağıya model ekleyerek kapat.","modelsAddModel":"Model ekle","modelsPoolStrategyLabel":"Havuz stratejisi","modelsPoolStrategyHint":"Yedek: ilk model birincildir, geri kalanı hata durumunda sırayla denenir. Dönüşümlü: kararlar havuzda döner.","councilHeading":"Konsey","councilConvened":"toplandı","councilDisabled":"devre dışı","councilEnableLabel":"Çok-LLM konseyini etkinleştir","councilEnableHint":"Yüksek riskli sorular, tek model yerine bağımsız koltuklar (yürütücü / veto hakkı olan şüpheci / denetçi) tarafından oylanır. ≥2 çözülebilir seçmen gerekir (aşağıda açık koltuklar veya ≥2 modelli havuz).","councilSeatsDerived":"Havuzdan türetilen koltuklar: {{seats}}","councilCustomLens":"Özel karar merceği — koltuğa aynen gönderilir.","councilCustomOption":"{{persona}} (özel)","councilVeto":"veto","councilAddVoter":"Seçmen ekle","councilRiskFloorLabel":"Risk tabanı","councilRiskFloorHint":"Tek model katmanı yerine konseyi toplayan minimum soru riski.","councilJudge":"Hakem","councilJudgeDesc":"Her oyun gerekçesini gören eşitlik bozan model.","councilResolved":"çözüldü: {{model}}","councilAlsoVoter":"⚠ ayrıca bir seçmen","councilAuto":"otomatik","councilPick":"Seç…","councilAutoReset":"Otomatik","councilQuorumLabel":"Yeter sayı","councilQuorumHint":"Geçerli bir oy döndürmesi gereken koltuk oranı.","councilApprovalLabel":"Onay","councilApprovalHint":"Kazanan seçeneğin aşması gereken kullanılmış oy ağırlığı oranı.","councilPerSeatTimeoutLabel":"Koltuk başına zaman aşımı","councilPerSeatTimeoutHint":"Tek bir koltuğun oyu için süre bütçesi. Karar zaman aşımından yavaş olması, tek bir takılmış koltuğun oyu geciktirdiği anlamına gelir.","councilMaxConcurrencyLabel":"Maksimum eşzamanlılık","councilMaxConcurrencyHint":"Kaç koltuğun paralel oy verdiği. Havuz tek hız sınırlı sağlayıcıyı paylaştığında bunu düşürün.","councilDistinctnessLabel":"Koltuk farklılığı","councilDistinctnessHint":"Yinelenen koltukları reddet: 'model' farklı modeller gerektirir, 'provider' tek bir kesintinin oyu etkileyememesi için bağımsız sağlayıcılar gerektirir.","councilVoterBudgetLabel":"Oy veren yanıt bütçesi","councilVoterBudgetHint":"Koltuk başına çıktı belirteci — akıl yürüten modeller düşünme belirteçlerini bu bütçeden harcar.","councilJudgeBudgetLabel":"Hakem yanıt bütçesi","councilJudgeBudgetHint":"Eşitlik bozan hakem çağrısı için çıktı belirteci.","councilSeatTemplate":"Koltuk şablonu:","ledgerHeading":"Karar günlüğü","ledgerRecordLabel":"Kararları + sonuçları kaydet","ledgerRecordHint":"Her kararı ve gözlemlenen sonucunu kalıcılaştırır; benzer geçmiş sonuçlar gelecekteki Beyin istemlerine geri beslenir.","ledgerAutoDenyLabel":"Başarısızlıklardan sonra otomatik reddet","ledgerAutoDenyHint":"Bir karar grubunun ardışık onayları, gözlemlenen başarısızlıklarla bu kadar kez sonlandıktan sonra deterministik olarak (LLM olmadan) reddet.","ledgerMemoryEntriesLabel":"Bellek içi girdiler","ledgerMemoryEntriesHint":"Bellekte tutulan halka boyutu ve başlangıçta diskten yüklenen geçmiş girdi sayısı.","ledgerRetryWindowLabel":"Müdahale yeniden deneme penceresi","ledgerRetryWindowHint":"Aynı tür bir izleyici müdahalesinin bu pencerede yeniden tetiklenmesi önceki yönlendirmeyi başarısız işaretler.","recentHeading":"Son kararlar ({{count}})","recentEmpty":"Bu oturumda henüz karar kaydedilmedi.","optInteractive":"Etkileşimli (bana sor)","optHeadless":"Başsız (asla sorma)","optConservative":"Muhafazakâr (varsayılan)","optDenyAll":"Tümünü reddet","optContinueRecommended":"Önerilenle devam et","optNeverDefault":"Asla (varsayılan)","optWhenDecided":"Karar verildiğinde","optAlways":"Her zaman","optFullDefault":"Tam (varsayılan)","optRedacted":"Kısaltılmış","optMetadataOnly":"Yalnızca meta veri","optConsultBrain":"Beyne danış (varsayılan)","optAlwaysSteer":"Her zaman yönlendir","optObserveOnly":"Yalnızca gözlemle","optFallback":"Yedek","optRoundRobin":"Dönüşümlü","optMediumPlus":"Orta+","optHighPlus":"Yüksek+","optCriticalOnly":"Yalnızca kritik","optNoneDefault":"Hiçbiri (varsayılan)","optDistinctModels":"Farklı modeller","optDistinctProviders":"Farklı sağlayıcılar","optDefault3":"Varsayılan (3)","optOff":"Kapalı","pickPoolTitle":"Beyin havuz modeli ekle","pickPoolHint":"Sıralı karar havuzu — ilki birincildir.","pickVoterTitle":"Konsey seçmeni ekle","pickVoterHint":"İletişim kutusu açık kalır — ≥2 seçmen ekleyin, sonra kapatın.","pickJudgeTitle":"Konsey hakemi seç","pickJudgeHint":"Her oyu gören eşitlik bozan.","persistError":"Ayarlar canlı uygulandı ancak kaydedilmedi.","riskCopy":{"off":"Her şeye insan karar verir","low":"Yalnızca düşük riski otomatik kararlaştır","medium":"Orta riske kadar otomatik kararlaştır","high":"Yüksek riske kadar otomatik kararlaştır","all":"Her şeyi otomatik kararlaştır"},"rulesConfigured_one":"{{count}} yapılandırıldı","rulesConfigured_other":"{{count}} yapılandırıldı"}`),O={default15s:`Varsayılan (15sn)`,waitForever:`Süresiz bekle`,defaultHalf:`Varsayılan (0,5)`,all:`Tümü`,n200Default:`200 (varsayılan)`,offDefault:`Kapalı (varsayılan)`,n20Default:`20 (varsayılan)`,m5Default:`5dk (varsayılan)`,default:`Varsayılan`,oneSerial:`1 (sıralı)`,default500:`Varsayılan (500)`,default10m:`Varsayılan (10dk)`},k={capToolCall:`Araç çağrısı`,capReasoning:`Akıl yürütme`,capTemperature:`Sıcaklık`,capAttachment:`Ek`,capStructuredOutput:`Yapılandırılmış çıktı`,capOpenWeights:`Açık ağırlıklar`},A={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};export{d as agent,c as allowlist,D as brain,O as brainOpt,C as cancel,i as connection,_ as context,A as default,x as display,f as execution,p as fallbacks,g as features,m as fleet,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
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{Ga as t,lt as n}from"./vendor-C_zEzV4N.js";var r=e(t(),1);async function i(e=``){let t=await fetch(`${e}/api/vector-memory/status`,{credentials:`include`});if(!t.ok)throw Error(`status failed: HTTP ${t.status}`);return await t.json()}async function a(e,t={}){let n=new URLSearchParams;n.set(`q`,e),t.limit!==void 0&&n.set(`limit`,String(t.limit)),t.threshold!==void 0&&n.set(`threshold`,String(t.threshold));let r=await fetch(`${t.baseUrl??``}/api/vector-memory/search?${n.toString()}`,{credentials:`include`});if(!r.ok)throw Error(`search failed: HTTP ${r.status}`);return await r.json()}var o=n();function s({baseUrl:e=``}={}){let[t,n]=(0,r.useState)(),[s,c]=(0,r.useState)(),[l,u]=(0,r.useState)(``),[d,f]=(0,r.useState)(10),[p,m]=(0,r.useState)(void 0),[h,g]=(0,r.useState)([]),[_,v]=(0,r.useState)(),[y,b]=(0,r.useState)(!1);(0,r.useEffect)(()=>{let t=!1;return i(e).then(e=>{t||(n(e),c(void 0))}).catch(e=>{t||(n(void 0),c(e instanceof Error?e.message:String(e)))}),()=>{t=!0}},[e]);let x=async()=>{let t=l.trim();if(t.length!==0){b(!0),v(void 0);try{let n=await a(t,{limit:d,...p===void 0?{}:{threshold:p},baseUrl:e});g(n.hits)}catch(e){g([]),v(e instanceof Error?e.message:String(e))}finally{b(!1)}}};return s===void 0?t===void 0?(0,o.jsxs)(`div`,{className:`vector-memory-panel vector-memory-panel--loading`,children:[(0,o.jsx)(`h3`,{children:`Vector Memory`}),(0,o.jsx)(`p`,{children:`Loading status…`})]}):t.enabled?(0,o.jsxs)(`div`,{className:`vector-memory-panel`,children:[(0,o.jsx)(`h3`,{children:`Vector Memory`}),(0,o.jsxs)(`dl`,{className:`vector-memory-panel__status`,children:[(0,o.jsx)(`dt`,{children:`Active provider`}),(0,o.jsx)(`dd`,{children:(0,o.jsx)(`code`,{children:t.providerId??`unknown`})}),(0,o.jsx)(`dt`,{children:`Model`}),(0,o.jsx)(`dd`,{children:(0,o.jsx)(`code`,{children:t.modelId??`unknown`})}),(0,o.jsx)(`dt`,{children:`Dimensions`}),(0,o.jsx)(`dd`,{children:t.dimensions??`unknown`}),(0,o.jsx)(`dt`,{children:`Entries / vectors`}),(0,o.jsxs)(`dd`,{children:[t.entries??0,` / `,t.vectors??0]}),(0,o.jsx)(`dt`,{children:`Store path`}),(0,o.jsx)(`dd`,{children:(0,o.jsx)(`code`,{children:t.storePath??`(project root)`})}),(0,o.jsx)(`dt`,{children:`Model cache`}),(0,o.jsx)(`dd`,{children:(0,o.jsx)(`code`,{children:t.modelCacheDir??`(project root)`})}),(0,o.jsx)(`dt`,{children:`Providers`}),(0,o.jsx)(`dd`,{children:t.providers?.join(`, `)??``})]}),(0,o.jsxs)(`div`,{className:`vector-memory-panel__search`,children:[(0,o.jsx)(`label`,{htmlFor:`vm-query`,children:`Query`}),(0,o.jsx)(`input`,{id:`vm-query`,type:`text`,value:l,onChange:e=>u(e.currentTarget.value),onKeyDown:e=>{e.key===`Enter`&&x()},placeholder:`apple banana`}),(0,o.jsxs)(`div`,{className:`vector-memory-panel__controls`,children:[(0,o.jsxs)(`label`,{children:[`limit`,(0,o.jsx)(`input`,{type:`number`,min:1,max:50,value:d,onChange:e=>f(Math.max(1,Math.min(50,Number(e.currentTarget.value)||10)))})]}),(0,o.jsxs)(`label`,{children:[`threshold`,(0,o.jsx)(`input`,{type:`number`,min:0,max:1,step:.05,value:p??``,onChange:e=>{let t=e.currentTarget.value;m(t===``?void 0:Number.parseFloat(t))}})]}),(0,o.jsx)(`button`,{type:`button`,onClick:()=>void x(),disabled:y,children:y?`Searching…`:`Search`})]})]}),_===void 0?null:(0,o.jsxs)(`p`,{className:`vector-memory-panel__error`,children:[`Search error: `,_]}),(0,o.jsxs)(`ol`,{className:`vector-memory-panel__hits`,children:[h.map(e=>(0,o.jsxs)(`li`,{className:`vector-memory-panel__hit`,children:[(0,o.jsxs)(`div`,{className:`vector-memory-panel__hit-header`,children:[(0,o.jsx)(`span`,{className:`vector-memory-panel__hit-score`,children:e.score.toFixed(3)}),e.summary?(0,o.jsx)(`span`,{className:`vector-memory-panel__hit-summary`,children:e.summary}):null]}),(0,o.jsx)(`p`,{className:`vector-memory-panel__hit-text`,children:e.text}),e.tags.length>0?(0,o.jsx)(`p`,{className:`vector-memory-panel__hit-tags`,children:e.tags.map(e=>(0,o.jsx)(`span`,{className:`vector-memory-panel__hit-tag`,children:e},e))}):null]},e.id)),h.length===0&&y===!1&&l.trim().length>0?(0,o.jsx)(`li`,{className:`vector-memory-panel__no-hits`,children:`No results.`}):null]})]}):(0,o.jsxs)(`div`,{className:`vector-memory-panel vector-memory-panel--disabled`,children:[(0,o.jsx)(`h3`,{children:`Vector Memory`}),(0,o.jsx)(`p`,{children:`Disabled — the webui-server host does not have a vector memory store wired.`})]}):(0,o.jsxs)(`div`,{className:`vector-memory-panel vector-memory-panel--error`,children:[(0,o.jsx)(`h3`,{children:`Vector Memory`}),(0,o.jsxs)(`p`,{children:[`Status unavailable: `,s]})]})}export{s as VectorMemoryPanel};
@@ -1 +0,0 @@
1
- import{n as e}from"./rolldown-runtime-hePW80VL.js";import{za as t}from"./vendor-C_zEzV4N.js";import{n}from"./utils-tsZEnrBH.js";import{t as r}from"./session-store-BgiP4PnQ.js";function i(e){typeof requestAnimationFrame==`function`?requestAnimationFrame(e):queueMicrotask(e)}var a=new class{pending=new Map;scheduled=!1;push(e,t,n){if(!t)return;let r=this.pending.get(e);r?(r.buffer+=t,r.flush=n):this.pending.set(e,{buffer:t,flush:n}),this.schedule()}schedule(){this.scheduled||(this.scheduled=!0,i(()=>{this.scheduled=!1,this.drain()}))}drain(){if(this.pending.size===0)return;let e=Array.from(this.pending.entries());this.pending.clear();for(let[t,n]of e)n.buffer&&n.flush(t,n.buffer)}drop(e){this.pending.delete(e)}dropAll(){this.pending.clear()}flush(e){let t=this.pending.get(e);t&&(this.pending.delete(e),t.buffer&&t.flush(e,t.buffer))}flushAll(){this.drain()}},o={maxReconnectAttempts:10,initialBackoffMs:1e3,maxBackoffMs:3e4,backoffMultiplier:2,jitterRatio:0,queueLimit:1e3,heartbeatIntervalMs:0,heartbeatTimeoutMs:0};function s(){return{phase:`idle`,reconnectAttempt:0,lastActivityAt:null,stopped:!1}}function c(e){return e.stopped?e:{...e,phase:`connecting`}}function l(e,t=Date.now()){return{...e,phase:`open`,reconnectAttempt:0,lastActivityAt:t,stopped:!1}}function u(e,t=Date.now()){return{...e,lastActivityAt:t}}function d(e){return{...e,phase:`closed`,stopped:!0}}function f(e){return{...e,phase:`idle`,reconnectAttempt:0,stopped:!1}}function p(e,t,n=Date.now(),r=Math.random){if(e.stopped||e.reconnectAttempt>=t.maxReconnectAttempts)return{state:{...e,phase:`closed`},plan:null};let i=e.reconnectAttempt+1,a=Math.min(t.initialBackoffMs*t.backoffMultiplier**(i-1),t.maxBackoffMs),o=(r()*2-1)*t.jitterRatio,s=Math.max(0,Math.round(a*(1+o)));return{state:{...e,phase:`reconnecting`,reconnectAttempt:i},plan:{attempt:i,delayMs:s,retryAt:n+s}}}var m=`abort,ping,user_message,tool.confirm_result,topic.advice,completion.request,model.switch,model.refine,model.fallback_choice,autonomy.switch,context.clear,context.compact,context.debug,context.editor.open,context.editor.validate,context.editor.apply,context.mode.create,context.mode.delete,context.mode.switch,context.mode.update,context.modes.list,context.repair,mode.switch,modes.list,session.checkpoints,session.delete,session.inspect,session.new,session.rename,session.resume,session.rewind,session.save,sessions.list,side_effects.list,stats.get,todo.update,todos.clear,todos.get,todos.remove`.split(`,`),h=[`collab.join`,`collab.leave`,`collab.annotate`,`collab.resolve`,`collab.request_pause`,`collab.resume`,`collab.grant_control`,`collab.inject_tool`,`mailbox.action`,`mailbox.agents`,`mailbox.clear`,`mailbox.compact`,`mailbox.messages`,`mailbox.purge`,`mailbox.send`],g=`brain.ask,brain.config.get,brain.config.set,brain.risk,brain.status,chronicle.facet,chronicle.facets,chronicle.graph,chronicle.metrics,chronicle.query,chronicle.status,config.doctor,design.list,design.materialize,design.set,design.state,design.swap,design.tune,design.use,design.verify,memory.list,memory.sage.backfillRecoverable,memory.sage.candidateResolve,memory.sage.delete,memory.sage.forFile,memory.sage.get,memory.sage.graph,memory.sage.list,memory.sage.listCandidates,memory.sage.listPage,memory.sage.recover,memory.sage.remember,memory.sage.update`.split(`,`),_=`auth.oauth.cancel,auth.oauth.code,auth.oauth.start,mcp.add,mcp.disable,mcp.discover,mcp.enable,mcp.list,mcp.prompt.get,mcp.prompts,mcp.remove,mcp.resource.read,mcp.resources,mcp.restart,mcp.sleep,mcp.update,mcp.wake,prompts.content,prompts.create,prompts.favorite,prompts.journal,prompts.list,prompts.recent,prompts.search,prompts.used,skills.content,skills.create,skills.edit,skills.export,skills.install,skills.list,skills.uninstall,skills.update`.split(`,`),v=`goal-state.get,goal.addTask,goal.assess,goal.assignTask,goal.clear,goal.get,goal.list,goal.load,goal.moveTask,goal.pause,goal.resume,goal.retryTask,goal.revert,goal.runTask,goal.save,goal.selectPhase,goal.start,goal.state,goal.status,goal.stop,goal.taskStatus,goal.toggleAutonomous,plan.get,plan.item.update,plan.template_use,task.update,tasks.get`.split(`,`),y=`sdd.board.cancel_task,sdd.board.cleanup_worktrees,sdd.board.delete_task,sdd.board.destroy,sdd.board.get,sdd.board.list,sdd.board.pause,sdd.board.reassign,sdd.board.resume,sdd.board.retry,sdd.board.retry_all_failed,sdd.board.rollback,sdd.board.set_task_fallbacks,sdd.board.set_task_model,sdd.board.set_task_verification,sdd.board.split_task,sdd.board.stop,sdd.run.from_graph,sdd.run.from_spec,sdd.run.start,sdd.spec.approve,sdd.spec.discard,sdd.spec.get,sdd.spec.message,sdd.spec.rewind,sdd.spec.start,specs.get,specs.list,specs.taskStatus`.split(`,`),ee=`files.create,files.delete,files.list,files.move,files.read,files.rename,files.skeleton,files.tree,files.write,git.changes,git.diff,git.info,projects.add,projects.list,projects.select,working_dir.set,worktree.cleanup,worktree.diff,worktree.merge,worktree.remove,worktree.scan,shell.open,process.kill,process.killAll,process.list,terminal.close,terminal.create,terminal.input,terminal.resize`.split(`,`),te=`codebase.index.server.shutdown,connections.health,connections.service_action,diag.get,key.add,key.delete,key.set_active,key.update,prefs.get,prefs.update,provider.add,provider.clear_models,provider.custom_models.remove,provider.custom_models.set,provider.models,provider.models.search,provider.probe,provider.remove,provider.status.clear,provider.status.get,provider.status.retry,provider.undo_clear,provider.update,providers.list,providers.saved,tool.disable,tool.enable,tools.list,webui.shutdown`.split(`,`),ne=`error,log,pong,side_effects,agent.status_changed,agent.timeline.message,client.status_update,chimera.report_available,compaction.failed,completion.result,context.compacted,context.debug,context.editor.snapshot,context.editor.validation,context.editor.applied,context.mode.changed,context.modes.list,context.repaired,ctx.max_context,ctx.pct,delegate.completed,delegate.started,iteration.completed,iteration.limit_reached,iteration.started,model.refine_result,modes.list,provider.active_blocked,provider.error,provider.fallback,provider.fallback_pending,provider.response,provider.retry,provider.status_changed,provider.stream_error,provider.text_delta,provider.thinking_delta,run.result,session.checkpoints,session.damaged,session.end,session.inspect,session.rewound,session.start,session.stats,sessions.list,sessions.status_update,stats.get,token.cost_estimate_unavailable,token.threshold,tool.confirm_needed,tool.disabled,tool.enabled,tool.executed,tool.loop_detected,tool.progress,tool.started,topic.advice_result,tools.list,trust.persisted`.split(`,`),re=[`collab.annotation.added`,`collab.annotation.resolved`,`collab.event`,`collab.injection.granted`,`collab.participant.joined`,`collab.participant.left`,`collab.pause.granted`,`collab.pause.released`,`collab.state`,`mailbox.action_result`,`mailbox.agent_registered`,`mailbox.agent_deregistered`,`mailbox.agents`,`mailbox.cleared`,`mailbox.compacted`,`mailbox.event`,`mailbox.messages`,`mailbox.sent`,`mailbox.purged`,`mailbox.received`,`subagent.budget_extended`,`subagent.event`],ie=`brain.answer,brain.config,brain.event,brain.status,chronicle.error,chronicle.facet_result,chronicle.facets_result,chronicle.graph_result,chronicle.metrics_result,chronicle.query_result,chronicle.status_result,config.doctor.result,design.list,design.materialize,design.set,design.state,design.swap,design.tune,design.use,design.verify,memory.event,memory.list,memory.sage.backfillRecoverable,memory.sage.candidateResolve,memory.sage.delete,memory.sage.forFile,memory.sage.get,memory.sage.graph,memory.sage.list,memory.sage.listCandidates,memory.sage.listPage,memory.sage.recover,memory.sage.remember,memory.sage.update`.split(`,`),ae=`mcp.content.error,mcp.content.selected,mcp.list,mcp.operation_result,mcp.prompts,mcp.resources,mcp.server.added,mcp.server.connected,mcp.server.disconnected,mcp.server.discovered,mcp.server.error,mcp.server.reconnected,mcp.server.removed,mcp.server.sleeping,mcp.server.updated,mcp.server.waking,prompts.content,prompts.created,prompts.favorite,prompts.journal,prompts.list,prompts.recent,prompts.search,prompts.used,skills.content,skills.created,skills.edited,skills.exported,skills.installed,skills.list,skills.uninstalled,skills.updated`.split(`,`),oe=`budget.decision,budget.threshold_reached,coordinator.stats,coordinator.status,eternal.iteration,fleet.concurrency_update,goal-state.updated,goal.assess.result,goal.list,goal.paused,goal.resumed,goal.saved,goal.error,goal.stopped,goal.failed,goal.completed,goal.cleared,goal.reverted,goal.progress,goal.state,in_flight.ended,in_flight.started,plan.updated,task.completed,task.failed,task.pending,task.started,tasks.updated,todos.cleared,todos.updated`.split(`,`),se=[`kanban.task.activity`,`sdd.board.lifecycle_result`,`sdd.board.list`,`sdd.board.snapshot`,`sdd.run.started`,`sdd.spec.agent_text`,`sdd.spec.error`,`sdd.spec.snapshot`,`specs.detail`,`specs.list`],ce=[`consensus.vote_cast`,`consensus.vote_initiated`,`consensus.vote_resolved`,`cron.job_fired`,`cron.snapshot`,`techstack.job.cancelled`,`techstack.job.failed`,`techstack.job.progress`,`techstack.job.started`,`techstack.report.delivered`,`techstack.report.ready`,`techstack.snapshot.updated`,`techstack.workspace.completed`],le=`checkpoint.written,codemap.file_event,codemap.index_updated,codemap.tool_executed,codemap.tool_started,file.saved,files.created,files.deleted,files.list,files.moved,files.read,files.renamed,files.skeleton_result,files.tree,files.tree.changed,files.written,git.changes,git.diff,git.info,process.list,projects.added,projects.list,projects.selected,terminal.exit,terminal.output,working_dir.changed,worktree.cleanup_result,worktree.diff_result,worktree.event,worktree.merge_result,worktree.orphans,worktree.state`.split(`,`),ue=[`auth.oauth.status`,`codebase.index.server.shutdown_result`,`connections.health_error`,`connections.health_result`,`connections.service_action_result`,`diag.get`,`key.operation_result`,`model.switch_result`,`prefs.updated`,`provider.catalog`,`provider.models`,`provider.models.search_result`,`provider.probe`,`provider.status.snapshot`,`providers.saved`],de=[...m,...h,...ee,...te,...v,...y,...g,..._],b=[...ne,...re,...le,...ue,...oe,...se,...ce,...ie,...ae],x=new Set(de),fe=new Set(b);function pe(e,t){return(t===`client`?x:fe).has(e)||e.startsWith(`kanban.`)&&e.length>7||e.startsWith(`agent-roster.`)&&e.length>13}var me=new Set([`__proto__`,`constructor`,`prototype`]),he=32;function S(e,t,n){if(n>he)return{code:`too_deep`,message:`Protocol payload exceeds the nesting limit`,path:t};if(typeof e!=`object`||!e)return null;for(let r of Object.keys(e)){let i=`${t}.${r}`;if(me.has(r))return{code:`unsafe_key`,message:`Unsafe protocol key: ${r}`,path:i};let a=S(e[r],i,n+1);if(a)return a}return null}function C(e,t){if(typeof e!=`object`||!e||Array.isArray(e))return{ok:!1,issue:{code:`invalid_envelope`,message:`Protocol message must be an object`}};let n=e;if(typeof n.type!=`string`||n.type.length===0)return{ok:!1,issue:{code:`invalid_type`,message:`Protocol message type must be a non-empty string`}};if(!pe(n.type,t))return{ok:!1,issue:{code:`unknown_type`,message:`Unknown ${t} message: ${n.type}`}};if(t===`server`&&!Object.hasOwn(n,`payload`))return{ok:!1,issue:{code:`invalid_envelope`,message:`Server protocol messages require a payload`}};let r=S(n,`$`,0);return r?{ok:!1,issue:r}:{ok:!0,message:e}}function ge(e,t){try{return C(JSON.parse(e),t)}catch{return{ok:!1,issue:{code:`invalid_envelope`,message:`Protocol frame is not valid JSON`}}}}var _e=[`protocol.directional-decoder`,`protocol.recursive-key-safety`,`chronicle.query`,`chronicle.facet`,`chronicle.facets`,`chronicle.graph`,`chronicle.metrics`,`chronicle.status`,`connections.health`,`context.topic-boundary`,`sdd.interview.continuity`,`sdd.run.from_graph`];function ve(e){let t=e.protocolVersion,n=t===void 0,r=n?1:Math.min(t,1),i=n||Number.isInteger(t)&&t>=1,a=new Set(e.protocolCapabilities??[]);return{compatible:i,legacyPeer:n,version:r,capabilities:_e.filter(e=>a.has(e))}}var ye={listTools(e){this.send({type:`tools.list`},e)},listMemory(e){this.send({type:`memory.list`},e)},listSageMemories(e){this.send({type:`memory.sage.list`},e)},listSageMemoriesPage(e,t){this.send({type:`memory.sage.listPage`,payload:{...e}},t)},listMemoryCandidates(e,t){this.send({type:`memory.sage.listCandidates`,payload:{...e}},t)},getSage(e,t){this.send({type:`memory.sage.get`,payload:{id:e}},t)},getSageGraph(e,t,n){this.send({type:`memory.sage.graph`,payload:{query:e,...t}},n)},updateSage(e,t,n){this.send({type:`memory.sage.update`,payload:{id:e,...t}},n)},deleteSage(e,t){this.send({type:`memory.sage.delete`,payload:{id:e,force:!0,...t===void 0?{}:{reason:t}}})},rememberSage(e,t){this.send({type:`memory.sage.remember`,payload:e},t)},findMemoriesForFile(e,t){this.send({type:`memory.sage.forFile`,payload:e},t)},recoverSage(e,t){this.send({type:`memory.sage.recover`,payload:e},t)},resolveMemoryCandidate(e,t){this.send({type:`memory.sage.candidateResolve`,payload:e},t)},backfillRecoverable(e,t){this.send({type:`memory.sage.backfillRecoverable`,payload:e},t)},listMcpServers(){this.send({type:`mcp.list`})},addMcpServer(e){this.send({type:`mcp.add`,payload:e})},removeMcpServer(e){this.send({type:`mcp.remove`,payload:{name:e}})},updateMcpServer(e){this.send({type:`mcp.update`,payload:e})},wakeMcpServer(e){this.send({type:`mcp.wake`,payload:{name:e}})},sleepMcpServer(e){this.send({type:`mcp.sleep`,payload:{name:e}})},discoverMcpServer(e){this.send({type:`mcp.discover`,payload:{name:e}})},listMcpResources(e,t=!1){this.send({type:`mcp.resources`,payload:{name:e,refresh:t}})},listMcpPrompts(e,t=!1){this.send({type:`mcp.prompts`,payload:{name:e,refresh:t}})},readMcpResource(e,t){this.send({type:`mcp.resource.read`,payload:{name:e,uri:t}})},getMcpPrompt(e,t,n){this.send({type:`mcp.prompt.get`,payload:{name:e,prompt:t,...n===void 0?{}:{arguments:n}}})},enableMcpServer(e){this.send({type:`mcp.enable`,payload:{name:e}})},disableMcpServer(e){this.send({type:`mcp.disable`,payload:{name:e}})},restartMcpServer(e){this.send({type:`mcp.restart`,payload:{name:e}})},listSkills(e){this.send({type:`skills.list`},e)},getSkillContent(e,t){this.send({type:`skills.content`,payload:{name:e,source:t}})},installSkill(e,t){this.send({type:`skills.install`,payload:{ref:e,global:t}})},uninstallSkill(e,t){this.send({type:`skills.uninstall`,payload:{name:e,global:t}})},checkForUpdates(e,t){this.send({type:`skills.update`,payload:{name:e,global:t}})},createSkill(e,t,n){this.send({type:`skills.create`,payload:{name:e,description:t,scope:n}})},editSkill(e,t){this.send({type:`skills.edit`,payload:{name:e,body:t}})},exportAllSkills(){this.send({type:`skills.export`})},getDiag(e){this.send({type:`diag.get`,payload:this.withSession({})},e)},getStats(e){this.send({type:`stats.get`,payload:this.withSession({})},e)},saveSession(){this.send({type:`session.save`,payload:this.withSession({})})},resumeSessionById(e){this.send({type:`session.resume`,payload:this.withSession({id:e})})},listModes(){this.send({type:`modes.list`})},switchMode(e){this.send({type:`mode.switch`,payload:{id:e}})},listFiles(e,t,n){this.send({type:`files.list`,payload:{query:e,limit:t,path:n}})},requestCompletion(e){this.send({type:`completion.request`,payload:e})},getTodos(){this.send({type:`todos.get`,payload:this.withSession({})})},clearTodos(){this.send({type:`todos.clear`,payload:this.withSession({})})},removeTodo(e){let t=typeof e==`number`?{index:e}:{id:e};this.send({type:`todos.remove`,payload:this.withSession(t)})},updateTodoStatus(e,t){this.send({type:`todo.update`,payload:this.withSession({id:e,status:t})})},getTasks(){this.send({type:`tasks.get`,payload:this.withSession({})})},updateTaskStatus(e,t){this.send({type:`task.update`,payload:this.withSession({id:e,status:t})})},getPlan(){this.send({type:`plan.get`,payload:this.withSession({})})},updatePlanItem(e,t){this.send({type:`plan.item.update`,payload:this.withSession({target:e,status:t})})},listSessions(e=50){this.send({type:`sessions.list`,payload:this.withSession({limit:e})})},deleteSession(e){this.send({type:`session.delete`,payload:{id:e}})},renameSession(e,t){this.send({type:`session.rename`,payload:{id:e,name:t}})},inspectSession(e){this.send({type:`session.inspect`,payload:{id:e}})},setWorkingDir(e){this.send({type:`working_dir.set`,payload:{path:e}})},resumeSession(e){this.send({type:`session.resume`,payload:this.withSession({id:e})})},ping(){this.send({type:`ping`})},refineModel(e,t){this.send({type:`model.refine`,payload:{text:e,...t?.timeoutMs===void 0?{}:{timeoutMs:t.timeoutMs},...t?.provider===void 0?{}:{provider:t.provider},...t?.model===void 0?{}:{model:t.model},...t?.previousRefined===void 0?{}:{previousRefined:t.previousRefined},...t?.previousEnglish===void 0?{}:{previousEnglish:t.previousEnglish},...t?.retryFeedback===void 0?{}:{retryFeedback:t.retryFeedback}}})}};function be(e){Object.assign(e.prototype,ye)}function w(e){return{type:`provider.clear_models`,payload:{providerId:e}}}function T(e,t){return{type:`provider.undo_clear`,payload:{providerId:e,previousModels:[...t]}}}function E(e){return{type:`provider.update`,payload:e}}var D={getGitInfo(){this.send({type:`git.info`})},getGitChanges(){this.send({type:`git.changes`})},getGitDiff(e){this.send({type:`git.diff`,payload:{path:e}})},getProviderStatus(){this.send({type:`provider.status.get`})},retryProviderModel(e,t){this.send({type:`provider.status.retry`,payload:{providerId:e,model:t}})},clearProviderStatus(e,t){this.send({type:`provider.status.clear`,payload:{providerId:e,model:t}})},newSession(){this.send({type:`abort`,payload:this.withSession({})}),this.send({type:`session.new`,payload:this.withSession({})})},listProviders(){this.send({type:`providers.list`})},listProviderModels(e){this.send({type:`provider.models`,payload:{providerId:e}})},listSavedProviders(){this.send({type:`providers.saved`})},searchProviderModels(e,t){this.send({type:`provider.models.search`,payload:{query:e,...t===void 0?{}:{limit:t}}})},addKey(e,t,n){this.send({type:`key.add`,payload:{providerId:e,label:t,apiKey:n}})},updateKey(e,t,n){this.send({type:`key.update`,payload:{providerId:e,label:t,apiKey:n}})},deleteKey(e,t){this.send({type:`key.delete`,payload:{providerId:e,label:t}})},setActiveKey(e,t){this.send({type:`key.set_active`,payload:{providerId:e,label:t}})},addProvider(e,t,n,r,i,a){this.send({type:`provider.add`,payload:{id:e,family:t,baseUrl:n,apiKey:r,...i?{models:i}:{},...a?{customModels:a}:{}}})},removeProvider(e){this.send({type:`provider.remove`,payload:{providerId:e}})},startOAuth(e,t){this.send({type:`auth.oauth.start`,payload:t?{kind:e,providerId:t}:{kind:e}})},submitOAuthCode(e,t){this.send({type:`auth.oauth.code`,payload:{kind:e,input:t}})},cancelOAuth(e){this.send({type:`auth.oauth.cancel`,payload:{kind:e}})},probeProvider(e,t){this.send({type:`provider.probe`,payload:t===void 0?{providerId:e}:{providerId:e,timeoutMs:t}})},clearProviderModels(e){this.send(w(e))},undoProviderClear(e,t){this.send(T(e,t))},setCustomModel(e,t,n){this.send({type:`provider.custom_models.set`,payload:{providerId:e,modelId:t,customModel:n}})},removeCustomModel(e,t){this.send({type:`provider.custom_models.remove`,payload:{providerId:e,modelId:t}})},updateProvider(e){this.send(E(e))},clearContext(){this.send({type:`context.clear`,payload:this.withSession({})})},compactContext(e=!1){this.send({type:`context.compact`,payload:this.withSession({aggressive:e})})},repairContext(){this.send({type:`context.repair`,payload:this.withSession({})})},openContextEditor(){this.send({type:`context.editor.open`,payload:this.withSession({})})},validateContextEditor(e,t,n,r){this.send({type:`context.editor.validate`,payload:this.withSession({baseRevision:e,messages:t,removals:n,allowRepair:r})})},applyContextEditor(e,t,n,r){this.send({type:`context.editor.apply`,payload:this.withSession({baseRevision:e,messages:t,removals:n,allowRepair:r})})},debugContext(e){this.send({type:`context.debug`,payload:this.withSession({})},e)},listContextModes(){this.send({type:`context.modes.list`,payload:this.withSession({})})},switchContextMode(e){this.send({type:`context.mode.switch`,payload:this.withSession({id:e})})},createContextMode(e){this.send({type:`context.mode.create`,payload:this.withSession(e)})},updateContextMode(e,t){this.send({type:`context.mode.update`,payload:this.withSession({id:e,...t})})},deleteContextMode(e){this.send({type:`context.mode.delete`,payload:this.withSession({id:e})})},switchAutonomy(e){this.send({type:`autonomy.switch`,payload:{mode:e}})},updatePrefs(e){this.send({type:`prefs.update`,payload:e})},getPrefs(){this.send({type:`prefs.get`})}};function O(e){Object.assign(e.prototype,D)}function k(e){return Math.max(0,Math.min(100,Math.round((typeof e==`number`&&Number.isFinite(e)?e:0)*100)))}function A(e,t=!1){if(t&&e.target){if(e.kind===`agent:tool`||e.kind===`tool:executed`||e.kind===`tool:started`)return`tool`;if(e.source===`leader`||e.source===`coordinator`)return`coordinator`;if(e.kind.startsWith(`provider:`))return`provider`;if(e.kind.startsWith(`mailbox:`))return`mailbox`}switch(e.kind){case`provider:call`:case`provider:delta`:case`provider:response`:return`provider`;case`agent:spawned`:case`agent:tool`:case`agent:status`:case`agent:text`:case`agent:ctx`:case`budget:warning`:case`budget:extended`:return`agent`;case`tool:started`:case`tool:executed`:case`tool:progress`:return`tool`;case`mailbox:send`:case`mailbox:deliver`:return`mailbox`;case`collab:event`:return`system`;case`session:start`:case`session:end`:case`iteration:start`:case`iteration:end`:case`eternal:iteration`:case`fleet:snapshot`:return`session`;case`context:compacted`:case`context:repaired`:case`cost:update`:return`system`;case`error`:return`error`;default:return`system`}}var j=400,M=1200;function N(e,t,n){if(e.size<=t)return e;let r=[...e.entries()].sort((e,t)=>n(e[1])-n(t[1]));for(let[n]of r.slice(0,e.size-t))e.delete(n);return e}function P(e){switch(e){case`provider:call`:case`provider:delta`:case`agent:tool`:case`tool:started`:case`tool:progress`:case`iteration:start`:case`agent:text`:return`streaming`;case`agent:status`:case`iteration:end`:return`completed`;case`error`:return`error`;case`tool:executed`:return`completed`;case`session:end`:return`idle`;default:return`active`}}var F=0;function I(){return`viz_${Date.now()}_${++F}`}var xe=250;function L(e,t){return t-e<xe}function R(e,t){if(e===t)return!0;if(!e||!t)return!1;let n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(let r of n){let n=e[r],i=t[r];if(n!==i){if(n==null||i==null||typeof n!=typeof i)return!1;if(typeof n==`object`){if(Array.isArray(n)||Array.isArray(i)||!R(n,i))return!1;continue}return!1}}return!0}var z={provider:`hsl(var(--info))`,agent:`hsl(var(--primary))`,tool:`hsl(var(--warning))`,mailbox:`hsl(var(--success))`,session:`hsl(var(--primary))`,system:`hsl(var(--muted-foreground))`,success:`hsl(var(--success))`,error:`hsl(var(--destructive))`},B={"provider:call":`hsl(var(--info))`,"provider:delta":`hsl(var(--primary))`,"agent:tool":`hsl(var(--warning))`,"mailbox:send":`hsl(var(--success))`,default:`hsl(var(--muted-foreground))`},V=t()((e,t)=>({events:[],toolEvents:[],nodes:new Map,edges:new Map,isActive:!1,maxEvents:2e3,counters:{totalTokens:0,totalCost:0,totalToolCalls:0,activeAgents:0,completedTasks:0,errors:0,mailboxMessages:0},pushEvent:t=>e(e=>{let n={...t,id:t.id??I(),timestamp:t.timestamp||Date.now()},r=[n,...e.events];r.length>e.maxEvents&&(r.length=e.maxEvents);let i=t.kind===`agent:tool`||t.kind===`tool:started`||t.kind===`tool:progress`||t.kind===`tool:executed`?[n,...e.toolEvents].slice(0,600):e.toolEvents,a=Date.now(),o=t.source,s={id:o,kind:A(t),label:t.label,status:P(t.kind),activity:1,color:t.color??z[A(t)],lastSeenAt:a},c=e.nodes.get(o),l=c?{...c,...s}:s,u=!R(c,l);c&&u&&L(c.lastSeenAt,a)&&R({...c,activity:l.activity,lastSeenAt:l.lastSeenAt},l)&&(l=c,u=!1);let d,f=!1,p;if(t.target){p=t.target;let n={id:p,kind:A(t,!0),label:p,status:P(t.kind),activity:.8,color:t.color??z[A(t,!0)],lastSeenAt:a},r=e.nodes.get(p);d=r?{...r,...n}:n,f=!R(r,d),r&&f&&L(r.lastSeenAt,a)&&R({...r,activity:d.activity,lastSeenAt:d.lastSeenAt},d)&&(d=r,f=!1)}let m,h=!1,g;if(t.target&&o){g=`${o}->${t.target}`;let n=e.edges.get(g),r={id:g,source:o,target:t.target,kind:t.kind,label:t.label,intensity:n?Math.min(1,n.intensity+.3):.7,color:t.color??z[A(t)]??z.agent,lastActiveAt:a,totalMagnitude:(n?.totalMagnitude??0)+(t.magnitude??0)};m=n?{...n,...r}:r,h=!R(n,m),n&&h&&L(n.lastActiveAt,a)&&R({...n,lastActiveAt:m.lastActiveAt},m)&&(m=n,h=!1)}let _=e.nodes,v=e.edges;return(u||f)&&(_=new Map(e.nodes),u&&_.set(o,l),f&&d&&p&&_.set(p,d)),h&&m&&g&&(v=new Map(e.edges),v.set(g,m)),_!==e.nodes&&(_=N(_,j,e=>e.lastSeenAt)),v!==e.edges&&(v=N(v,M,e=>e.lastActiveAt)),{events:r,toolEvents:i,nodes:_,edges:v}}),upsertNode:t=>e(e=>{let n=new Map(e.nodes),r=n.get(t.id);return n.set(t.id,{...r,...t,lastSeenAt:t.lastSeenAt===void 0?Date.now():t.lastSeenAt}),{nodes:n}}),removeNode:t=>e(e=>{let n=new Map(e.nodes);n.delete(t);let r=new Map(e.edges);for(let[e,n]of r)(n.source===t||n.target===t)&&r.delete(e);return{nodes:n,edges:r}}),upsertEdge:t=>e(e=>{let n=new Map(e.edges),r=n.get(t.id);return n.set(t.id,{...r,...t,lastActiveAt:t.lastActiveAt===void 0?Date.now():t.lastActiveAt,intensity:t.intensity??r?.intensity??.5,color:t.color??B[t.kind]??B.default,totalMagnitude:(r?.totalMagnitude??0)+(t.totalMagnitude??0)}),{edges:n}}),removeEdge:t=>e(e=>{let n=new Map(e.edges);return n.delete(t),{edges:n}}),clear:()=>e({events:[],toolEvents:[],nodes:new Map,edges:new Map,counters:{totalTokens:0,totalCost:0,totalToolCalls:0,activeAgents:0,completedTasks:0,errors:0,mailboxMessages:0}}),setActive:t=>e({isActive:t}),decayActivity:()=>e(e=>{let t=new Map(e.nodes);for(let[e,n]of t)if(n.activity>=.01){let r=n.activity*.92;t.set(e,{...n,activity:r<.01?0:r})}let n=new Map(e.edges);for(let[e,t]of n)if(t.intensity>=.01){let r=t.intensity*.9;n.set(e,{...t,intensity:r<.01?0:r})}return{nodes:t,edges:n}}),prunesStale:t=>e(e=>{let n=Date.now()-t,r=new Map(e.nodes);for(let[e,t]of r)t.lastSeenAt<n&&r.delete(e);let i=new Map(e.edges);for(let[e,t]of i)t.lastActiveAt<n&&i.delete(e);return{nodes:r,edges:i,events:e.events.filter(e=>e.timestamp>n)}})}));function H(e,t){switch(e){case`provider.text_delta`:{let e=t.text??``;return{id:I(),kind:`provider:delta`,timestamp:Date.now(),source:`provider`,target:`leader`,label:e.slice(0,60),magnitude:e.length,data:{text:e},color:z.provider,flowGroup:`provider`}}case`provider.response`:{let e=t.usage,n=(e?.input??0)+(e?.output??0);return{id:I(),kind:`provider:response`,timestamp:Date.now(),source:`provider`,target:`leader`,label:`${(e?.input??0).toLocaleString(`en-US`)} in / ${(e?.output??0).toLocaleString(`en-US`)} out`,magnitude:n,data:t,color:z.provider,flowGroup:`provider`}}case`provider.stream_error`:{let e=t.message??`Provider stream error`;return{id:I(),kind:`error`,timestamp:Date.now(),source:`provider`,target:`leader`,label:e.slice(0,80),magnitude:1,data:t,color:z.error,flowGroup:`provider`}}case`tool.started`:{let e=t.name??`tool`;return{id:I(),kind:`tool:started`,timestamp:Date.now(),source:e,target:`filesystem`,label:e,magnitude:1,data:t,color:z.tool,flowGroup:`tool:${e}`}}case`tool.executed`:{let e=t.name??`tool`,n=t.ok??!0;return{id:I(),kind:`tool:executed`,timestamp:Date.now(),source:e,target:`leader`,label:`${e} ${n?`✓`:`✗`} (${t.durationMs??0}ms)`,magnitude:t.durationMs??0,data:t,color:n?z.tool:z.error,flowGroup:`tool:${e}`}}case`tool.progress`:{let e=t.name??`tool`,n=t.event?.text??``;return{id:I(),kind:`tool:progress`,timestamp:Date.now(),source:e,target:`leader`,label:n.slice(0,60)||e,magnitude:n.length,data:t,color:z.tool,flowGroup:`tool:${e}`}}case`codemap.tool_started`:{let e=t.name??`tool`,n=t.agentId??`subagent`;return{id:I(),kind:`tool:started`,timestamp:Date.now(),source:n,target:e,label:e,magnitude:1,data:t,color:z.tool,flowGroup:`agent:${n}`}}case`codemap.tool_executed`:{let e=t.name??`tool`,n=t.agentId??`subagent`,r=t.ok??!0;return{id:I(),kind:`tool:executed`,timestamp:Date.now(),source:n,target:e,label:`${e} ${r?`✓`:`✗`} (${t.durationMs??0}ms)`,magnitude:t.durationMs??0,data:t,color:r?z.tool:z.error,flowGroup:`agent:${n}`}}case`tool.loop_detected`:{let e=t.tools??``,n=t.kind??`loop`,r=t.action===`steer`;return{id:I(),kind:r?`agent:status`:`error`,timestamp:Date.now(),source:e||n,target:`leader`,label:`${n} loop x${t.repeatCount??0}`,magnitude:t.repeatCount??1,data:t,color:r?z.agent:z.error,flowGroup:`tool`}}case`delegate.started`:{let e=t.target??`delegate`,n=t.task??``;return{id:I(),kind:`agent:status`,timestamp:Date.now(),source:`leader`,target:e,label:n.slice(0,80)||`Delegating to ${e}`,magnitude:1,data:t,color:z.agent,flowGroup:`delegate:${e}`}}case`delegate.completed`:{let e=t.subagentId??t.target??`delegate`,n=t.ok??!1;return{id:I(),kind:n?`agent:status`:`error`,timestamp:Date.now(),source:e,target:`leader`,label:(t.summary??t.status??`delegate completed`).slice(0,80),magnitude:t.durationMs??1,data:t,color:n?z.agent:z.error,flowGroup:`delegate:${e}`}}case`subagent.event`:{let e=t.kind,n=t.subagentId??`unknown`,r=t.name??n;switch(e){case`spawned`:return{id:I(),kind:`agent:spawned`,timestamp:Date.now(),source:n,target:`session`,label:`${r} spawned`,magnitude:1,data:t,color:z.agent,flowGroup:`agent:${n}`};case`tool_executed`:{let e=t.toolName??`tool`,r=t.ok??!0;return{id:I(),kind:`agent:tool`,timestamp:Date.now(),source:n,target:e,label:e,magnitude:t.durationMs??0,data:t,color:r?z.tool:z.error,flowGroup:`agent:${n}`}}case`task_completed`:{let e=t.status??`completed`;return{id:I(),kind:`agent:status`,timestamp:Date.now(),source:n,target:`session`,label:`${r} ${e}`,magnitude:1,data:t,color:e===`success`?z.success:z.error,flowGroup:`agent:${n}`}}case`ctx_pct`:return{id:I(),kind:`agent:ctx`,timestamp:Date.now(),source:n,target:`session`,label:`ctx ${k(t.load)}%`,magnitude:t.tokens??0,data:t,color:z.agent,flowGroup:`agent:${n}`};case`iteration_summary`:return{id:I(),kind:`agent:text`,timestamp:Date.now(),source:n,target:`session`,label:(t.partialText??``).slice(0,80)||`iter ${t.iteration??0}`,magnitude:t.costUsd??0,data:t,color:z.agent,flowGroup:`agent:${n}`};case`budget_extended`:return{id:I(),kind:`budget:extended`,timestamp:Date.now(),source:n,target:`session`,label:`${r} extended budget`,magnitude:t.totalExtensions??1,data:t,color:z.tool,flowGroup:`agent:${n}`};case`budget_warning`:return{id:I(),kind:`budget:warning`,timestamp:Date.now(),source:n,target:`session`,label:`${r} hit ${t.budgetKind??`budget`} ${t.used??0}/${t.limit??0}`,magnitude:t.used??1,data:t,color:z.error,flowGroup:`agent:${n}`}}return null}case`mailbox.event`:{let e=t.event,n=t.from??`?`,r=t.to??`?`,i=t.subject??``,a=e===`mailbox.sent`;return{id:I(),kind:a?`mailbox:send`:`mailbox:deliver`,timestamp:Date.now(),source:n,target:r,label:i||(a?`→ ${r}`:`← ${n}`),magnitude:1,data:t,color:z.mailbox,flowGroup:`mailbox`}}case`iteration.started`:{let e=t.index??0;return{id:I(),kind:`iteration:start`,timestamp:Date.now(),source:`leader`,target:`session`,label:`Iteration ${e}`,magnitude:e,data:t,color:z.agent,flowGroup:`iteration`}}case`iteration.completed`:{let e=t.index??0;return{id:I(),kind:`iteration:end`,timestamp:Date.now(),source:`leader`,target:`session`,label:`Iteration ${e} done`,magnitude:e,data:t,color:z.session,flowGroup:`iteration`}}case`ctx.pct`:{let e=t.tokens??0;return{id:I(),kind:`agent:ctx`,timestamp:Date.now(),source:`leader`,target:`session`,label:`ctx ${k(t.load)}%`,magnitude:e,data:t,color:z.agent,flowGroup:`leader`}}case`error`:{let e=t.message??`Error`;return{id:I(),kind:`error`,timestamp:Date.now(),source:t.phase??`system`,target:`session`,label:e,magnitude:1,data:t,color:z.error,flowGroup:`error`}}case`context.compacted`:return{id:I(),kind:`context:compacted`,timestamp:Date.now(),source:`system`,target:`session`,label:`Compacted: ${(t.saved??0).toLocaleString(`en-US`)} tokens`,magnitude:t.saved??0,data:t,color:`hsl(var(--info))`,flowGroup:`context`};case`compaction.failed`:{let e=t.message??`Compaction failed`;return{id:I(),kind:`error`,timestamp:Date.now(),source:`compactor`,target:`session`,label:e.slice(0,80),magnitude:t.tokens??1,data:t,color:z.error,flowGroup:`context`}}case`context.repaired`:return{id:I(),kind:`context:repaired`,timestamp:Date.now(),source:`system`,target:`session`,label:`Repaired: ${t.removedMessages??0} msgs`,magnitude:t.removedMessages??0,data:t,color:`hsl(var(--info))`,flowGroup:`context`};case`session.start`:{let e=t.sessionId??`?`,n=t.projectName??``;return{id:I(),kind:`session:start`,timestamp:Date.now(),source:`session`,target:`leader`,label:n||e.slice(0,12),magnitude:1,data:t,color:z.session,flowGroup:`session`}}case`sessions.status_update`:{let e=t.sessions??[];return{id:I(),kind:`fleet:snapshot`,timestamp:Date.now(),source:`system`,target:`session`,label:`${e.length} session(s)`,magnitude:e.length,data:t,color:z.system,flowGroup:`fleet`}}default:return null}}function Se(e){let t=e.payload?.sessionId,n=r.getState().session?.id;return!t||!n||t===n}function Ce(e){let t=H(e.type,e.payload);t&&(V.getState().pushEvent(t),V.getState().setActive(!0))}function we(e,t,n){let r=e.payload??{};for(let[e,n]of Object.entries(t)){let t=r[e];if(!U(t,n))return null}if(n)for(let[e,t]of Object.entries(n)){let n=r[e];if(n!=null&&!U(n,t))return null}return r}function U(e,t){switch(t){case`string`:return typeof e==`string`;case`number`:return typeof e==`number`;case`boolean`:return typeof e==`boolean`;case`object`:return typeof e==`object`&&!!e&&!Array.isArray(e);case`array`:return Array.isArray(e);default:return!1}}function Te(e){try{return new URL(e).searchParams.get(`token`)}catch{return null}}function W(){if(typeof window>`u`||!window.location)return null;try{let e=window.location.search??``;return new URLSearchParams(e).get(`token`)}catch{return null}}function G(e){try{let t=new URL(e);return t.searchParams.delete(`token`),t.toString()}catch{return e}}function K(){if(!(typeof window>`u`||!window.location||!window.history?.replaceState))try{let e=window.location.href;if(!e)return;let t=new URL(e);if(!t.searchParams.has(`token`))return;t.searchParams.delete(`token`),window.history.replaceState(window.history.state,document.title,t.toString())}catch{}}function Ee(){if(typeof document>`u`)return null;let e=document.querySelector(`meta[name="wrongstack-ws-url"]`)?.getAttribute(`content`)?.trim();if(!e)return null;try{let t=new URL(e);if(t.protocol!==`ws:`&&t.protocol!==`wss:`)return null;let n=W();return n&&!t.searchParams.has(`token`)&&t.searchParams.set(`token`,n),t.toString()}catch{return null}}function q(){let e=Ee();if(e)return e;if(typeof window>`u`||!window.location?.hostname)return`ws://127.0.0.1:3456`;let t=window.location.protocol===`https:`?`wss`:`ws`,n=window.location.hostname.toLowerCase(),r=window.location.port,i=W(),a=i?`?token=${encodeURIComponent(i)}`:``;return`${t}://${n===`localhost`||n===`127.0.0.1`||n===`[::1]`||n===`::1`?`127.0.0.1`:n}${r?`:${r}`:``}${a}`}function J(){if(typeof window>`u`||!window.location?.hostname)return`http://127.0.0.1:3456`;let e=window.location.protocol===`https:`?`https`:`http`,t=window.location.hostname.toLowerCase(),n=window.location.port?`:${window.location.port}`:``;return t===`localhost`||t===`127.0.0.1`||t===`[::1]`||t===`::1`?`${e}://127.0.0.1${n}`:`${e}://${window.location.hostname}${n}`}var De=e({WrongStackWebSocketClient:()=>Z,getWSClient:()=>$}),Oe={"context.debug":`context.debug`,"diag.get":`diag.get`,"memory.list":`memory.list`,"memory.sage.get":`memory.sage.get`,"memory.sage.graph":`memory.sage.graph`,"memory.sage.list":`memory.sage.list`,"memory.sage.listCandidates":`memory.sage.listCandidates`,"memory.sage.listPage":`memory.sage.listPage`,"memory.sage.remember":`memory.sage.remember`,"memory.sage.update":`memory.sage.update`,"skills.list":`skills.list`,"stats.get":`stats.get`,"tools.list":`tools.list`},ke=3e4,Ae=32;function Y(e){try{let t=new URL(e),n=new URL(J());return t.hostname===n.hostname}catch{return!0}}var X=class e{ws=null;url;handlers=new Map;maxReconnectAttempts=10;shouldReconnect=!0;reconnectTimer=null;connectPromise=null;socketGeneration=0;messageQueue=[];messageQueueChars=0;messageQueueWeights=new WeakMap;connectionState=s();static MAX_QUEUED_MESSAGES=1e3;static MAX_QUEUED_CHARS=16777216;pendingConfirms=new Map;static PENDING_CONFIRM_TTL_MS=6e4;sessionId=null;sessionSwapPending=!1;lastErrorText;statusListeners=new Set;currentStatus={state:`connecting`};suppressedChatEchoes=new Map;protocolCapabilities=new Set;protocolVersion=null;supportsCapability(e){return this.protocolCapabilities.has(e)}get negotiatedProtocolVersion(){return this.protocolVersion}onStatus(e){return this.statusListeners.add(e),e(this.currentStatus),()=>this.statusListeners.delete(e)}get status(){return this.currentStatus}setStatus(e){this.currentStatus=e;for(let t of this.statusListeners)try{t(e)}catch{}}constructor(e){this.url=e??q()}withSession(e){return this.sessionId?{...e,sessionId:this.sessionId}:e}async ensureAuthCookie(){if(typeof window>`u`)return;if(document.cookie.split(`;`).some(e=>e.trim().startsWith(`ws_token=`))){Y(this.url)&&(this.url=G(this.url)),K();return}let e=Te(this.url)??W();if(!e)return;let t=J()+`/ws-auth?token=${encodeURIComponent(e)}`;try{let e=await fetch(t,{method:`GET`,credentials:`same-origin`,cache:`no-store`});e.ok?(Y(this.url)&&(this.url=G(this.url)),K()):console.warn(JSON.stringify({level:`warn`,event:`ws_client.ws_auth_failed`,status:e.status,timestamp:new Date().toISOString()}))}catch(e){console.warn(JSON.stringify({level:`warn`,event:`ws_client.ws_auth_error`,message:e instanceof Error?e.message:String(e),timestamp:new Date().toISOString()}))}}connect(){return this.ws?.readyState===WebSocket.OPEN?Promise.resolve():(this.connectPromise||=this.openSocket().finally(()=>{this.connectPromise=null}),this.connectPromise)}async openSocket(){return await this.ensureAuthCookie(),this.connectionState=c(this.connectionState),new Promise((e,t)=>{if(this.ws?.readyState===WebSocket.OPEN){e();return}this.setStatus({state:`connecting`});let n=++this.socketGeneration;try{let r=new WebSocket(this.url);this.ws=r,r.binaryType=`arraybuffer`;let i=setTimeout(()=>{if(this.ws===r){try{r.close()}catch{}this.ws===r&&(this.ws=null)}this.lastErrorText=`Connection timeout`,t(Error(`Connection timeout`)),s()},3e4),a=!1,o=!1,s=()=>{o||(o=!0,this.attemptReconnect())};r.onopen=()=>{this.socketGeneration===n&&(clearTimeout(i),a=!0,this.connectionState=l(this.connectionState),this.lastErrorText=void 0,this.setStatus({state:`open`}),this.flushMessageQueue(),e())},r.onmessage=e=>{if(this.socketGeneration!==n)return;this.connectionState=u(this.connectionState);let t=ge(String(e.data),`server`);t.ok?this.handleMessage(t.message):console.error(JSON.stringify({level:`error`,event:`ws_client.message_rejected`,code:t.issue.code,message:t.issue.message,timestamp:new Date().toISOString()}))},r.onerror=e=>{this.socketGeneration===n&&(console.error(JSON.stringify({level:`error`,event:`ws_client.error`,message:e instanceof Error?e.message:String(e),timestamp:new Date().toISOString()})),this.lastErrorText=`Connection error (see browser devtools)`,a||(clearTimeout(i),t(Error(this.lastErrorText)),s()))},r.onclose=e=>{if(this.socketGeneration===n){if(this.sessionSwapPending=!1,!a){clearTimeout(i);let n=e.reason||`Closed with code ${e.code}`;this.lastErrorText=n,t(Error(n)),s();return}e.reason&&!this.lastErrorText?this.lastErrorText=`${e.reason} (code ${e.code})`:!this.lastErrorText&&e.code!==1e3&&(this.lastErrorText=`Closed with code ${e.code}`),this.attemptReconnect()}}}catch(e){if(this.socketGeneration!==n)return;this.lastErrorText=e instanceof Error?e.message:String(e),this.setStatus({state:`closed`,error:this.lastErrorText}),t(e)}})}attemptReconnect(){if(!this.shouldReconnect){this.connectionState=d(this.connectionState),this.reconnectTimer=null,this.setStatus({state:`closed`,error:this.lastErrorText??`Disconnected`});return}let t=p(this.connectionState,{...o,maxReconnectAttempts:this.maxReconnectAttempts,queueLimit:e.MAX_QUEUED_MESSAGES});if(this.connectionState=t.state,!t.plan){this.reconnectTimer=null,this.setStatus({state:`closed`,error:this.lastErrorText??`Disconnected`});return}this.setStatus({state:`reconnecting`,attempt:t.plan.attempt,nextRetryAt:t.plan.retryAt,lastError:this.lastErrorText}),this.reconnectTimer=setTimeout(async()=>{if(this.reconnectTimer=null,this.shouldReconnect)try{await this.connect()}catch(e){console.error(JSON.stringify({level:`error`,event:`ws_client.reconnect_failed`,message:e instanceof Error?e.message:String(e),timestamp:new Date().toISOString()}))}},t.plan.delayMs)}retryNow(){this.currentStatus.state!==`open`&&(this.reconnectTimer&&=(clearTimeout(this.reconnectTimer),null),this.connectionState=f(this.connectionState),this.connect().catch(e=>console.warn(JSON.stringify({level:`warn`,event:`ws_client.reconnect_failed`,message:e instanceof Error?e.message:String(e),timestamp:new Date().toISOString()}))))}flushMessageQueue(){let e=this.messageQueue.splice(0);this.messageQueueChars=0;for(let t of e)try{this.send(t)}catch(e){console.warn(JSON.stringify({level:`warn`,event:`ws.flush_failed`,message:e instanceof Error?e.message:String(e)}))}}handleMessage(t){if(t.type===`tool.confirm_needed`){let n=t.payload;this.sweepExpiredPendingConfirms(Date.now()),this.pendingConfirms.set(n.id,{expiresAtMs:Date.now()+e.PENDING_CONFIRM_TTL_MS}),this.emit(t);return}if(t.type===`session.start`){let e=t.payload,n=ve(e);this.sessionId=e.sessionId,this.protocolVersion=n.version,this.protocolCapabilities=new Set(n.capabilities),this.sessionSwapPending=!1}else t.type===`error`&&(t.payload.phase===`session.new`||t.payload.phase===`session.resume`)&&(this.sessionSwapPending=!1);this.emit(t)}sweepExpiredPendingConfirms(e){for(let[t,n]of this.pendingConfirms)n.expiresAtMs<=e&&this.pendingConfirms.delete(t)}emit(e){let t=this.handlers.get(e.type);if(t)for(let n of t)try{n(e)}catch(t){console.error(JSON.stringify({level:`error`,event:`ws_client.handler_error`,messageType:e.type,message:t instanceof Error?t.message:String(t),timestamp:new Date().toISOString()}))}}send(e,t={}){let n=this.constructor,r=n.MAX_QUEUED_MESSAGES,i=n.MAX_QUEUED_CHARS,o=C(e,`client`);if(!o.ok)return console.error(JSON.stringify({level:`error`,event:`ws_client.outbound_message_rejected`,code:o.issue.code,message:o.issue.message,timestamp:new Date().toISOString()})),!1;let s=JSON.stringify(o.message),c=this.ws?.readyState===WebSocket.OPEN;if(!c&&s.length>i)return console.warn(JSON.stringify({level:`warn`,event:`ws_client.message_queue_full`,cap:r,charCap:i,droppedType:e.type,reason:`message_too_large`,timestamp:new Date().toISOString()})),!1;let l=e.type===`session.new`||e.type===`session.resume`;if(l&&this.sessionSwapPending)return!1;if(l&&(this.sessionSwapPending=!0),t.echoToChat===!1){let t=Oe[e.type];if(t){let e=this.suppressedChatEchoes.get(t)??[];for(e.push(Date.now()+ke);e.length>Ae;)e.shift();this.suppressedChatEchoes.set(t,e)}}if((e.type===`context.clear`||e.type===`session.new`||e.type===`session.resume`)&&a.dropAll(),c)return this.ws?.send(s),!0;{if(t.queueIfDisconnected===!1)return!1;let n;for(;this.messageQueue.length>0&&(this.messageQueue.length>=r||this.messageQueueChars+s.length>i);){let e=this.messageQueue.shift();if(!e)break;n??=e;let t=this.messageQueueWeights.get(e)??JSON.stringify(e).length;this.messageQueueChars=Math.max(0,this.messageQueueChars-t),this.messageQueueWeights.delete(e)}return n&&console.warn(JSON.stringify({level:`warn`,event:`ws_client.message_queue_full`,cap:r,charCap:i,droppedType:n.type,timestamp:new Date().toISOString()})),this.messageQueue.push(e),this.messageQueueWeights.set(e,s.length),this.messageQueueChars+=s.length,!0}}consumeSuppressedChatEcho(e){let t=this.suppressedChatEchoes.get(e);if(!t)return!1;let n=Date.now();for(;t.length>0&&t[0]<=n;)t.shift();return t.length===0?(this.suppressedChatEchoes.delete(e),!1):(t.shift(),t.length===0&&this.suppressedChatEchoes.delete(e),!0)}on(e,t){let n=this.handlers.get(e);return n||(n=new Set,this.handlers.set(e,n)),n.add(t),()=>n?.delete(t)}off(e,t){this.handlers.get(e)?.delete(t)}sendMessage(e,t,r=!1){let i=`msg_${Date.now()}_${n().slice(0,8)}`;return this.send({type:`user_message`,payload:this.withSession({id:i,content:e,timestamp:Date.now(),...r?{freshContext:!0}:{},...t&&t.length>0?{images:t}:{}})}),i}adviseTopic(e,t=1e4){let r=n();return new Promise(n=>{let i=!1,a=e=>{i||(i=!0,clearTimeout(s),o(),n(e))},o=this.on(`topic.advice_result`,e=>{e.payload.requestId===r&&a(e.payload)}),s=setTimeout(()=>{a({requestId:r,suggestNewContext:!1,confidence:0,reason:`Topic check timed out; continuing in the current context.`,source:`local`})},t);this.send({type:`topic.advice`,payload:this.withSession({requestId:r,prompt:e})})})}sendMailboxMessage(e){let t=`mbox_${Date.now()}_${n().slice(0,8)}`;return this.send({type:`mailbox.send`,payload:{requestId:t,to:e.to,type:e.type,audience:e.audience??`all`,subject:e.subject,body:e.body,priority:e.priority??`normal`}}),t}sendAbort(){this.send({type:`abort`,payload:this.withSession({})})}sendConfirm(e,t){this.pendingConfirms.has(e)&&this.pendingConfirms.delete(e),this.send({type:`tool.confirm_result`,payload:this.withSession({id:e,decision:t})})}switchModel(e,t,r=8e3){let i=n();return new Promise(n=>{let a=!1,o=e=>{a||(a=!0,clearTimeout(c),s(),n(e))},s=this.on(`model.switch_result`,e=>{let t=e.payload;t.requestId===i&&o(t)}),c=setTimeout(()=>{o({requestId:i,success:!1,message:`Model switch timed out. Please try again.`,provider:e,model:t,runActive:!1})},r);this.send({type:`model.switch`,payload:{provider:e,model:t,requestId:i}})})}shutdownCodebaseIndexServer(e=8e3){let t=n();return new Promise(n=>{let r=!1,i=e=>{r||(r=!0,clearTimeout(o),a(),n(e))},a=this.on(`codebase.index.server.shutdown_result`,e=>{e.payload.requestId&&e.payload.requestId!==t||i(e.payload)}),o=setTimeout(()=>{i({requestId:t,stopped:!1,reason:`Codebase index server shutdown timed out.`})},e);this.send({type:`codebase.index.server.shutdown`,payload:{requestId:t}},{queueIfDisconnected:!1})||i({requestId:t,stopped:!1,reason:`WebSocket is not connected.`})})}disconnect(){this.shouldReconnect=!1,this.connectionState=d(this.connectionState),this.reconnectTimer&&=(clearTimeout(this.reconnectTimer),null),this.messageQueue.length=0,this.messageQueueChars=0,this.sessionSwapPending=!1,this.pendingConfirms.clear(),this.ws?.close(),this.ws=null}get isConnected(){return this.ws?.readyState===WebSocket.OPEN}get currentSessionId(){return this.sessionId}};be(X),O(X);var Z=X,Q=null;function $(e){return Q||=new Z(e),Q}export{Ce as a,H as c,Se as i,a as l,De as n,we as o,q as r,V as s,$ as t};