@wrongstack/webui 1.0.24 → 1.0.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/AgentRosterView-BJ-1SQOm.js +12 -0
- package/dist/assets/{AnalyticsDashboard-DgqJODVI.js → AnalyticsDashboard-FYrD8BFQ.js} +1 -1
- package/dist/assets/AudienceMemoryPanel-BghMZicW.js +3 -0
- package/dist/assets/ChangesView-B3uQtZGR.js +3 -0
- package/dist/assets/ChimeraReviewsView-CBRbTHGM.js +1 -0
- package/dist/assets/ChronicleDashboard-B1E-_u64.js +1 -0
- package/dist/assets/CodeEditor-CbcWuMGV.js +2 -0
- package/dist/assets/CodeMap-WOfveRTG.js +1 -0
- package/dist/assets/{CronJobsPanel-GTK038V9.js → CronJobsPanel-DOFA5WVq.js} +1 -1
- package/dist/assets/{DeadCodeScanPanel-DX4OEuyp.js → DeadCodeScanPanel-4ToPZX7e.js} +1 -1
- package/dist/assets/{DebugDashboard-CKp3sa_k.js → DebugDashboard-DAsNHSpG.js} +1 -1
- package/dist/assets/{DesignGalleryView-DVUTYaP6.js → DesignGalleryView-Dd5YnKhs.js} +1 -1
- package/dist/assets/GoalView-BaDGAXuQ.js +1 -0
- package/dist/assets/KanbanView-CG8bVhpR.js +3 -0
- package/dist/assets/{MailboxDetailView-CylnzTVc.js → MailboxDetailView-COxz-eEJ.js} +1 -1
- package/dist/assets/{MemoryDrawer-DJ0Y98Z8.js → MemoryDrawer-4lDXuHCi.js} +1 -1
- package/dist/assets/MemoryManager-DQlnpch1.js +1 -0
- package/dist/assets/{ProcessMonitor-BnQ3vJtn.js → ProcessMonitor-BUjfYqG3.js} +1 -1
- package/dist/assets/PromptJournalView-o2dmPrwg.js +1 -0
- package/dist/assets/ProviderTestView-5wNbI46L.js +1 -0
- package/dist/assets/QueuePanel-DP9D99DX.js +1 -0
- package/dist/assets/{RefreshDebugView-s6MyGpPq.js → RefreshDebugView-CB7_a_TI.js} +1 -1
- package/dist/assets/{RepositoryHistoryView-CWi_Zo3F.js → RepositoryHistoryView-C_zpYLY6.js} +2 -2
- package/dist/assets/RequirementIntakeView-CahKEHJn.js +1 -0
- package/dist/assets/{SageTabs-D6eTg3ix.js → SageTabs-5Z2PR11S.js} +2 -2
- package/dist/assets/{SddFlowGraph-B-ptkFX6.js → SddFlowGraph-DSoWnlIt.js} +1 -1
- package/dist/assets/SddHub-0q2EpwYz.js +2 -0
- package/dist/assets/{SessionInspectView-NSpj5WEN.js → SessionInspectView-CbDFR_tP.js} +1 -1
- package/dist/assets/SessionList-DhQK7JnP.js +1 -0
- package/dist/assets/{SessionsDashboard-mF4PzdKY.js → SessionsDashboard-DNLDczSd.js} +1 -1
- package/dist/assets/SetupScreen-C-hpHQQ9.js +1 -0
- package/dist/assets/{SkillDetailView-B9BFyB1i.js → SkillDetailView-Bir-Kdm4.js} +3 -3
- package/dist/assets/TechStackView-CJ3Abnwg.js +2 -0
- package/dist/assets/TerminalPanel-8WHNTeQK.js +1 -0
- package/dist/assets/activity-B9WjS_Cz.js +10 -0
- package/dist/assets/activity-BB7AHL0U.js +10 -0
- package/dist/assets/activity-Bd0XmdqX.js +10 -0
- package/dist/assets/activity-BvmJte2K.js +10 -0
- package/dist/assets/activity-DOEbDWqw.js +10 -0
- package/dist/assets/activity-beTxIN7V.js +10 -0
- package/dist/assets/activity-t-0KDhv5.js +10 -0
- package/dist/assets/{button-BbeB5Qm8.js → button-UuKTnoM-.js} +1 -1
- package/dist/assets/chat-9GLubejR.js +1 -0
- package/dist/assets/chat-B50ssTLh.js +1 -0
- package/dist/assets/chat-CDioiM1L.js +1 -0
- package/dist/assets/chat-Cll_3gXD.js +1 -0
- package/dist/assets/chat-Cqhc6jQa.js +1 -0
- package/dist/assets/chat-DN1MggWt.js +1 -0
- package/dist/assets/chat-fyvZyUZM.js +1 -0
- package/dist/assets/chat-store-BMwP_sS0.js +1 -0
- package/dist/assets/{codemap-activity-store-Ha7XbGgq.js → codemap-activity-store-WjfEZe4_.js} +1 -1
- package/dist/assets/{common-DvjdaRhB.js → common-2kj0c3pG.js} +1 -1
- package/dist/assets/{common-D0QL7rwb.js → common-BAvh8XBp.js} +1 -1
- package/dist/assets/{common-opV6EoLd.js → common-CKwGvEQD.js} +1 -1
- package/dist/assets/{common-DJRPtYAt.js → common-CUd7l34J.js} +1 -1
- package/dist/assets/{common-BtyQBZBN.js → common-DmS4Wp1i.js} +1 -1
- package/dist/assets/common-PC103akE.js +1 -0
- package/dist/assets/{common-Bjl7V12m.js → common-zatZ4s-Z.js} +1 -1
- package/dist/assets/config-store-Cb4iyhGv.js +21 -0
- package/dist/assets/{dialog-b-Ai37sa.js → dialog-BDUaV5gY.js} +1 -1
- package/dist/assets/{empty-state-pfuS5znr.js → empty-state-BzoEa04Q.js} +1 -1
- package/dist/assets/{fonts-DRGbd-AM.js → fonts-C303yVU_.js} +2 -2
- package/dist/assets/i18n-CzTjKT4L.js +3 -0
- package/dist/assets/index-Ci22AODp.js +182 -0
- package/dist/assets/index-DfU9PQg8.css +1 -0
- package/dist/assets/{input-BA6D2L3K.js → input-DMnC2O7-.js} +1 -1
- package/dist/assets/{mailbox-store-ZQO_Rv6E.js → mailbox-store-DyOOYbni.js} +1 -1
- package/dist/assets/{roster-ws-Cv_PHlEV.js → roster-ws-D-DCMdrg.js} +1 -1
- package/dist/assets/settings-7W0ofid0.js +1 -0
- package/dist/assets/settings-BAArGYGW.js +1 -0
- package/dist/assets/settings-Btyr_M2v.js +1 -0
- package/dist/assets/settings-BwL_DVmc.js +1 -0
- package/dist/assets/settings-C7ybAkyi.js +1 -0
- package/dist/assets/settings-CgtL8eYb.js +1 -0
- package/dist/assets/settings-D57Fd8Z8.js +1 -0
- package/dist/assets/{shared-BFJvAYzX.js → shared-CLNEiW00.js} +1 -1
- package/dist/assets/stores-Svlibwo5.js +7 -0
- package/dist/assets/toasts-3tM1krOo.js +1 -0
- package/dist/assets/toasts-BrHW33qA.js +1 -0
- package/dist/assets/toasts-Buww129h.js +1 -0
- package/dist/assets/toasts-CSN9Fy47.js +1 -0
- package/dist/assets/toasts-DOoYxbHd.js +1 -0
- package/dist/assets/toasts-DkDnbhs_.js +1 -0
- package/dist/assets/toasts-Jo4VH13n.js +1 -0
- package/dist/assets/ui-store-DI0iusYZ.js +1 -0
- package/dist/assets/{utils-CKsqCaP8.js → utils-B21Devim.js} +1 -1
- package/dist/assets/{vector-memory-panel-YWv6xcza.js → vector-memory-panel-DnX-ODHC.js} +1 -1
- package/dist/assets/{vendor-V3ydTHqN.js → vendor-BfBvt432.js} +28 -28
- package/dist/assets/{view-navigation-CpIPxhZp.js → view-navigation-Cvrp_uJm.js} +1 -1
- package/dist/components/BrowserLivePane.d.ts +2 -0
- package/dist/components/ChangesView.d.ts +3 -1
- package/dist/components/ChatInput/chat-input-bars.d.ts +1 -1
- package/dist/components/ChatInput/image-attachments.d.ts +19 -2
- package/dist/components/ChatInput/slash-routing.d.ts +18 -0
- package/dist/components/ChatInput/use-paste-drop.d.ts +3 -0
- package/dist/components/ChatInput/use-prompt-queue-view.d.ts +13 -0
- package/dist/components/ChatView/BackgroundShellStrip.d.ts +16 -0
- package/dist/components/ChatView/TerminalStrip.d.ts +8 -0
- package/dist/components/CodeMap.d.ts +0 -12
- package/dist/components/GoalPanel.d.ts +2 -1
- package/dist/components/ImageDiffView.d.ts +12 -0
- package/dist/components/KanbanTaskExecution.d.ts +64 -0
- package/dist/components/KanbanTaskInspector.d.ts +1 -1
- package/dist/components/MessageBubble/AttachmentGallery.d.ts +1 -1
- package/dist/components/MessageBubble/FailedRunContinue.d.ts +7 -3
- package/dist/components/MessageBubble/GeneratedImagePreview.d.ts +10 -0
- package/dist/components/SessionTabBar/summaries.d.ts +4 -0
- package/dist/components/SettingsPanel/LimitsSection.d.ts +7 -0
- package/dist/components/SettingsPanel/MCPSection.d.ts +1 -37
- package/dist/components/SettingsPanel/MCPServerCards.d.ts +67 -0
- package/dist/components/SettingsPanel/MCPServerDialog.d.ts +11 -0
- package/dist/components/SettingsPanel/PreferenceControls.d.ts +8 -0
- package/dist/components/SettingsPanel/ProviderSavedProfiles.d.ts +50 -0
- package/dist/components/SettingsPanel/ProviderSection.d.ts +2 -79
- package/dist/components/SettingsPanel/SettingsNavigation.d.ts +12 -0
- package/dist/components/SettingsPanel/brain-section-options.d.ts +1 -2
- package/dist/components/SettingsPanel/provider-section-types.d.ts +79 -0
- package/dist/components/SidePanel/SessionList.d.ts +1 -34
- package/dist/components/SidePanel/session-history.d.ts +61 -0
- package/dist/components/SystemPromptPresetEditor.d.ts +9 -0
- package/dist/components/TechStackView/AnalyzeControls.d.ts +25 -0
- package/dist/components/TechStackView/RemediationTab.d.ts +20 -0
- package/dist/components/TechStackView/TrendsTab.d.ts +17 -0
- package/dist/components/TerminalPanel.d.ts +8 -1
- package/dist/components/WorkspaceDock.d.ts +2 -2
- package/dist/components/review/ReviewDiff.d.ts +21 -0
- package/dist/components/review/ReviewTray.d.ts +15 -0
- package/dist/components/review/review-diff-model.d.ts +31 -0
- package/dist/components/use-code-map-flow.d.ts +25 -0
- package/dist/components/use-office-map-canvas.d.ts +1 -1
- package/dist/components/use-office-map-topology.d.ts +31 -0
- package/dist/hooks/use-live-browser.d.ts +7 -0
- package/dist/hooks/useWebSocket.d.ts +1 -2
- package/dist/hooks/ws-handlers/chat-handlers.d.ts +12 -0
- package/dist/hooks/ws-handlers/goal-handlers.d.ts +2 -0
- package/dist/hooks/ws-handlers/mcp-status-handlers.d.ts +6 -0
- package/dist/hooks/ws-handlers/prompt-queue-handlers.d.ts +18 -0
- package/dist/hooks/ws-handlers/techstack-handlers.d.ts +7 -0
- package/dist/index.css +3013 -3013
- package/dist/index.html +19 -19
- package/dist/index.js +53010 -47407
- package/dist/lib/compact-file-tree.d.ts +30 -0
- package/dist/lib/project-image.d.ts +26 -0
- package/dist/lib/provider-warm.d.ts +3 -0
- package/dist/lib/ws-client-session-methods.d.ts +2 -0
- package/dist/lib/ws-client.d.ts +3 -0
- package/dist/stores/chat-lane-data.d.ts +153 -0
- package/dist/stores/chat-lanes.d.ts +3 -174
- package/dist/stores/chat-queue-helpers.d.ts +9 -0
- package/dist/stores/chat-store-types.d.ts +3 -0
- package/dist/stores/chat-store.d.ts +1 -1
- package/dist/stores/context-editor-store.d.ts +1 -1
- package/dist/stores/fleet-transcript.d.ts +14 -0
- package/dist/stores/git-changes-store.d.ts +3 -0
- package/dist/stores/goal-run-store.d.ts +8 -0
- package/dist/stores/goal-state-store.d.ts +3 -0
- package/dist/stores/goal-store.d.ts +9 -11
- package/dist/stores/index.d.ts +1 -1
- package/dist/stores/local-prefs-defaults.d.ts +341 -0
- package/dist/stores/local-prefs.d.ts +2 -318
- package/dist/stores/notification-store.d.ts +9 -0
- package/dist/stores/provider-quota-store.d.ts +5 -0
- package/dist/stores/review-store.d.ts +54 -0
- package/dist/stores/session-activity.d.ts +33 -0
- package/dist/stores/session-tab-store.d.ts +1 -46
- package/dist/stores/techstack-store.d.ts +140 -1
- package/dist/stores/terminal-strip-store.d.ts +26 -0
- package/dist/stores/types.d.ts +5 -0
- package/dist/stores/ui-store-chrome.d.ts +1 -1
- package/dist/stores/ui-store-persist.d.ts +2 -2
- package/dist/stores/ui-store-types.d.ts +3 -3
- package/dist/stores/ui-store.d.ts +5 -5
- package/dist/types/brain.d.ts +4 -2
- package/dist/types/client-message.d.ts +122 -14
- package/dist/types/jev.d.ts +2 -0
- package/dist/types/prompt-queue.d.ts +55 -0
- package/dist/types/protocol-core.d.ts +4 -216
- package/dist/types/runtime.d.ts +3 -38
- package/dist/types/server-message-files.d.ts +22 -0
- package/dist/types/server-message-mcp.d.ts +32 -0
- package/dist/types/server-message-system.d.ts +121 -0
- package/dist/types/server-message.d.ts +4 -3
- package/dist/types/system.d.ts +2 -24
- package/package.json +11 -9
- package/dist/assets/AgentRosterView-Dq8Xa0WK.js +0 -12
- package/dist/assets/AudienceMemoryPanel-BVGdDVTT.js +0 -3
- package/dist/assets/ChangesView-BVyLENBb.js +0 -1
- package/dist/assets/ChimeraReviewsView-CTuxzgTC.js +0 -1
- package/dist/assets/ChronicleDashboard-BRP7D6RZ.js +0 -1
- package/dist/assets/CodeEditor-k3z3M0NG.js +0 -2
- package/dist/assets/CodeMap-CvHNQZEF.js +0 -1
- package/dist/assets/GoalView-D8G8e8YG.js +0 -1
- package/dist/assets/KanbanView-BMXGDqGo.js +0 -3
- package/dist/assets/MemoryManager-DfcsYPUB.js +0 -1
- package/dist/assets/PromptJournalView-D7k8Yh5a.js +0 -1
- package/dist/assets/ProviderTestView-DSd6kkWT.js +0 -1
- package/dist/assets/QueuePanel-79KiyZWD.js +0 -1
- package/dist/assets/RequirementIntakeView-D_Ea20fx.js +0 -1
- package/dist/assets/SddHub-CSVfLGpr.js +0 -2
- package/dist/assets/SessionList-BYRCs1AK.js +0 -1
- package/dist/assets/SetupScreen-BUZeJSZi.js +0 -1
- package/dist/assets/TechStackView-CXJilX0M.js +0 -2
- package/dist/assets/TerminalPanel-CAXevSAa.js +0 -1
- package/dist/assets/activity-B3wutYIE.js +0 -10
- package/dist/assets/activity-Be03cc7g.js +0 -10
- package/dist/assets/activity-CiYZ3y4e.js +0 -10
- package/dist/assets/activity-CmIA2MhR.js +0 -10
- package/dist/assets/activity-Cp5GhldB.js +0 -10
- package/dist/assets/activity-DFCf7l5d.js +0 -10
- package/dist/assets/activity-EbNUY7Ci.js +0 -10
- package/dist/assets/chat-6dE2AJNN.js +0 -1
- package/dist/assets/chat-B3AJmhGD.js +0 -1
- package/dist/assets/chat-BHsbpaVt.js +0 -1
- package/dist/assets/chat-BITJe8-v.js +0 -1
- package/dist/assets/chat-U-Jjb8_k.js +0 -1
- package/dist/assets/chat-_Xp5fDnj.js +0 -1
- package/dist/assets/chat-mSbSzPl5.js +0 -1
- package/dist/assets/chat-store-C7InoWAO.js +0 -1
- package/dist/assets/common-DPPTV3yw.js +0 -1
- package/dist/assets/config-store-BbL0WxLE.js +0 -21
- package/dist/assets/i18n-Dv97urcO.js +0 -3
- package/dist/assets/index-CON0Nbm4.css +0 -1
- package/dist/assets/index-DX6tHUzs.js +0 -177
- package/dist/assets/settings-BCvuzOJ6.js +0 -1
- package/dist/assets/settings-DMPKd-4K.js +0 -1
- package/dist/assets/settings-DxQ2452f.js +0 -1
- package/dist/assets/settings-Dz3StaVx.js +0 -1
- package/dist/assets/settings-EBW1mlXc.js +0 -1
- package/dist/assets/settings-Er2LHp9d.js +0 -1
- package/dist/assets/settings-EzznCDaX.js +0 -1
- package/dist/assets/stores-DXn5tdr7.js +0 -7
- package/dist/assets/toasts-BsmyGP95.js +0 -1
- package/dist/assets/toasts-CgXHu8ZB.js +0 -1
- package/dist/assets/toasts-DZ6HdKgG.js +0 -1
- package/dist/assets/toasts-DizCJjAR.js +0 -1
- package/dist/assets/toasts-NC2MT4uN.js +0 -1
- package/dist/assets/toasts-bPl097de.js +0 -1
- package/dist/assets/toasts-tCVo15mP.js +0 -1
- package/dist/assets/ui-store-DxDwFHNK.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`Impostazioni`,t=`Configure every aspect of your agent workspace`,n={browse:`Esplora`,search:`Cerca un’impostazione…`,clearSearch:`Cancella ricerca`,noResults:`Nessuna impostazione trovata`,workspace:`Area di lavoro`,models:`Modelli e connessioni`,behavior:`Comportamento agente`,system:`Sistema e sicurezza`,label:`Sezioni impostazioni`},r={title:`Test provider`,description:`Verifica provider e abbonamenti salvati; controlla quote, autenticazione, latenza e limiti dei token.`,open:`Apri test provider`},i={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.`,fonts:`Caratteri`,fontsDesc:`Caratteri di interfaccia, chat, editor e terminale; dimensione, interlinea e legature.`,jev:`Jev`,jevDesc:`TypeSafe / Jev`},a={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`},o={providerHealth:{heading:`Stato dei provider`,hint:`Quali coppie provider/modello sono integre, degradate o bloccate e perché.`,refresh:`Aggiorna`,empty:`Nessun provider monitorato.`,summary:`{{blocked}} bloccati · {{degraded}} degradati · {{healthy}} integri`,totalFailures:`errori`,rateLimits:`limiti di frequenza`,state:{blocked:`Bloccato`,degraded:`Degradato`,healthy:`Integro`},blocked:`Bloccato`,degraded:`Degradato`,consecutive:`errori consecutivi`,retryNow:`Riprova ora`,clear:`Cancella`,allHealthy:`Tutti i provider monitorati sono integri.`,statSuccesses:`successi`,statFailures:`errori`,statRateLimits:`limiti di frequenza`,statConsecutive:`consecutivi`,lastError:`Ultimo errore`,recentErrors:`Errori recenti`,autoRecovery:`Ripristino automatico alle`,expired:`Scaduto`,remainingSecs:`{{secs}} s`,remainingMins:`{{mins}} min`,remainingHours:`{{hours}} h {{mins}} min`,explainHealthy:`Risponde normalmente.`,explain402:`Limite di fatturazione raggiunto (402). Bloccato per circa 15 minuti fino al ripristino della quota.`,explain403quota:`Limite di utilizzo raggiunto per questo ciclo. Bloccato fino al prossimo ripristino (circa 15 min).`,explain403auth:`Errore di autorizzazione/autenticazione. Non ripetibile: controlla la chiave API e i diritti di accesso.`,explain429:`Limite di frequenza raggiunto (429). Limitazione temporanea con ripristino automatico.`,explain529:`Server sovraccarico (529). Il provider è sottoposto a un carico elevato.`,explain5xx:`Errore del server ({{status}}). Problema temporaneo del backend.`,explainNetwork:`Rete non raggiungibile. Controlla la connessione o la pagina di stato del provider.`,explainTimeout:`Richiesta scaduta (408). Il provider ha risposto troppo lentamente.`,explainStreamHang:`Flusso interrotto (599). Il provider si è fermato durante la risposta.`,explainQuota:`Quota esaurita. Bloccato fino alla finestra di ripristino.`,explainUnknown:`Tipo di errore: {{kind}} / stato: {{status}}.`},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`,serviceAutoRestarting:`Riavvio automatico…`},s={removeProfileConfirm:`Rimuovere il profilo «{{alias}}» e tutte le sue chiavi?`,removeProfileBody:`Le credenziali salvate e i riferimenti a questo account nelle impostazioni dei modelli saranno rimossi.`,deleteKeyConfirm:`Eliminare la chiave «{{label}}» da «{{alias}}»?`,addProfile:`Aggiungi account / profilo di autenticazione`,profileAlias:`Alias del profilo di autenticazione`,profileHint:`Ogni account ha un alias e credenziali propri. Le destinazioni di fallback sono alias/modello.`,profileExists:`Il profilo «{{alias}}» esiste già. Scegli un altro alias.`,operationTimeout:`Nessuna risposta dal server. Controlla la connessione e riprova.`,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}}`},c={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…`},l={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}}`,authRequired:`Accesso richiesto`,authorized:`Autorizzato`,authorizeTitle:`Autorizza con OAuth`,authSignOutTitle:`Rimuovi le credenziali OAuth`,authSignOutBody:`Rimuovere le credenziali OAuth salvate per "{{name}}"? Dovrai autorizzare di nuovo.`,authPromptTitle:`Completa l'accesso a "{{name}}"`,authPromptBody:`Apri la pagina di autorizzazione e approva l'accesso. Questo pannello si aggiorna quando il provider reindirizza.`,authPromptOpen:`Apri la pagina di autorizzazione`,toastAuthorized:`"{{name}}" autorizzato`,toastAuthFailed:`"{{name}}" richiede l'autorizzazione{{suffix}}`},u={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`},d={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}}`},f={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.`,autoCollapseInputLabel:`Riduci l'editor sotto la cronologia`,autoCollapseInputHint:`Quando si carica una sessione con messaggi, riduci l'editor sotto la cronologia. Disattivato per impostazione predefinita — l'editor resta espanso finché non lo riduci manualmente.`,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`,animationStyleStatic:`Statico`,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`},p={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:`Esegui le chiamate agli strumenti senza chiedere, tranne i tipi di danno elencati sotto.`,yoloConfirmHeading:`Chiedi comunque per`,yoloConfirmIntro:`YOLO esegue tutto il resto senza supervisione. Questi sono i tipi di danno davanti ai quali si ferma e ti chiede.`,yoloConfirmLockedNote:`Questi due chiedono sempre. Scrivono i file che decidono se ti verra chiesto qualcosa, quindi disattivarli lascerebbe all'agente spegnere il proprio sistema di approvazione.`,yoloKindLocked:`chiede sempre`,yoloKind:{"disk-wipe":{label:`Cancellare un disco`,hint:`mkfs, dd su un dispositivo raw, format C:, fork bomb`},"system-halt":{label:`Spegnere o riavviare`,hint:`shutdown, reboot`},"delete-outside":{label:`Cancellare fuori dal progetto`,hint:`cancellazione ricorsiva forzata che esce dal progetto o colpisce una radice di sistema o home`},"git-history":{label:`Riscrivere la cronologia git`,hint:`reset --hard, clean -f, push --force, filter-branch`},publish:{label:`Pubblicare o distribuire`,hint:`npm publish, docker push, kubectl delete namespace`},"download-and-run":{label:`Eseguire codice scaricato`,hint:`curl | sh e payload inline che scaricano ed eseguono`},"bulk-delete":{label:`Cancellare in massa`,hint:`find -exec rm, rmSync inline su molti percorsi`},"agent-state":{label:`Scrivere lo stato di WrongStack`,hint:`config.json, trust.json, auth.json`},"credential-bind":{label:`Legare una chiave API a un endpoint`,hint:`agganciare una chiave nota a un URL di provider`}},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`,reasoningEffortAuto:`Auto (generale)`,reasoningEffortAutoHint:`Impostazione generale: {{value}}`,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).`,reasoningEffortModelSet:`livelli del modello attivo`,reasoningEffortUnsupported:`Non offerto da questo modello (supportati: {{levels}}) — l'impostazione verrà omessa.`},m={heading:`Esecuzione`,maxIterationsLabel:`Iterazioni max per run`,unlimitedLabel:`Illimitato`,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.`},h={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`},g={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.`},_={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.`,wrongProxyHeading:`WrongProxy / WrongTrace`,wrongProxyEnabledLabel:`Instrada gli URL base attraverso il proxy locale`,wrongProxyEnabledHint:`Quando attivo, l'URL base di ogni provider viene riscritto attraverso il proxy configurato (predefinito http://localhost:3444/proxy/<host><path>). openai-codex è escluso: parla direttamente con il backend ChatGPT tramite un token OAuth.`,wrongProxyUrlLabel:`URL del proxy`,wrongProxyUrlHint:`Dove ascolta il daemon proxy locale. Il sistema verifica periodicamente <url>/api/health; un daemon irraggiungibile disabilita la riscrittura senza riprovare a ogni pressione di tasto.`,wrongProxyChangesApply:`Le modifiche si applicano immediatamente alle richieste successive — nessun riavvio necessario.`,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.`},v={chimeraDedicatedHeading:`Chimera — Post-session Code Review`,chimeraDedicatedHint:`Automated code quality review that runs after every agent session. Catches regressions, anti-patterns, and potential bugs.`,chimeraSectionEnabled:`Post-session review (Chimera)`,chimeraSectionEnabledHint:`Run a code review agent after every iteration.`,chimeraProviderLabel:`Chimera provider`,chimeraProviderHint:`Provider for the review agent. Select one from your configured providers.`,chimeraProviderSessionDefault:`Session default`,chimeraModelLabel:`Model`,chimeraModelSessionDefault:`Session default`,chimeraModelHint:`Model for the review agent. Requires a provider first.`,chimeraMaxFilesLabel:`Max files per review`,chimeraMaxFilesHint:`Maximum number of changed files included in a single review call.`,chimeraAutoFixLabel:`Auto-fix mode`,chimeraAutoFixHint:`Whether the review agent should automatically apply fixes for issues it finds.`,chimeraAutoFixOff:`Off — review only`,chimeraAutoFixAsk:`Ask — confirm before applying`,chimeraAutoFixAuto:`Auto — apply without confirmation`,autoReviewCascadeOnLabel:`Cascata a partire da`,autoReviewCascadeOnHint:`Quando una recensione trova problemi a questa gravità o superiore, avvia agenti di follow-up.`,autoReviewCascadeOnOff:`Disattivato`,autoReviewCascadeOnHigh:`Alta o superiore`,autoReviewCascadeOnCritical:`Solo critica`,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.`},y={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.`,toolCoachLabel:`Guida agli strumenti`,toolCoachHint:`Suggerisce strumenti abilitati durante l'attività e guida dopo gli errori. Attiva per impostazione predefinita.`,indexOnStartLabel:`Indicizza all'avvio`,indexOnStartHint:`Costruisci l'indice dei simboli del codebase all'avvio della sessione.`,pluginsPerPluginHeading:`🔌 Per-Plugin Controls`,pluginSearch:`Cerca plugin`,pluginEnabledOnly:`Solo attivi`,pluginNoMatches:`Nessun plugin corrisponde a questo filtro.`,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`,pluginErrorLens:`Error Lens — failure diagnostics`,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`},b={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`},x={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.`},S={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.`},C={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 del terminale/scheda con lo stato di esecuzione (parità TUI).`,keyboardShortcutsLabel:`Scorciatoie da tastiera`,keyboardShortcutsHint:`Abilita le scorciatoie da tastiera globali (Ctrl+K, Alt+1..4, ecc.). Disattivato per impostazione predefinita.`,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.`,thinkingWordInvalid:`Usa una sola parola di massimo 16 lettere, numeri, trattini bassi o trattini.`,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`,animationStyleStatic:`Statico`,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)`},w=`Cancella preferenze locali`,T=`Annulla`,E=`Cancellare le preferenze di questo browser?`,D=`Cancella le preferenze memorizzate in questo browser e ricarica la pagina. Le impostazioni connesse vengono ricaricate dal server.`,O=`Cancella e ricarica`,k=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.","councilRoundsLabel":"Turni di deliberazione","councilRoundsHint":"Il turno 1 è indipendente. Nei turni successivi ogni seggio vede i voti degli altri e può rivedere la propria posizione. Viene conteggiato solo l’ultimo turno e ogni turno costa una chiamata in più per seggio.","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"}`),A={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)`,roundsOff:`1 (nessuna deliberazione)`,default500:`Predefinito (500)`,default10m:`Predefinito (10 min)`},j={capToolCall:`Chiamata a strumento`,capReasoning:`Ragionamento`,capTemperature:`Temperatura`,capAttachment:`Allegato`,capStructuredOutput:`Output strutturato`,capOpenWeights:`Pesi aperti`},M={presetsHeading:`Set di caratteri`,presetsHint:`Un set imposta tutti i ruoli insieme; i caratteri vengono scaricati solo al primo utilizzo.`,presets:{workbench:{label:`Banco di lavoro`,description:`L’aspetto predefinito del banco di lavoro.`},plex:{label:`IBM Plex`,description:`Un’unica famiglia tecnica dall’inizio alla fine.`},modern:{label:`Moderno`,description:`Inter neutro con JetBrains Mono per il codice.`},geist:{label:`Geist`,description:`Abbinamento netto di Geist Sans e Mono.`},classic:{label:`Classico`,description:`Source Sans, Serif e Code Pro di Adobe.`},editorial:{label:`Editoriale`,description:`Titoli con grazie e un carattere da libro per la chat.`},readable:{label:`Leggibile`,description:`Caratteri molto leggibili per sessioni lunghe.`},friendly:{label:`Amichevole`,description:`Forme arrotondate e rilassate con Fira Code.`},monospace:{label:`Monospaziato`,description:`Monospaziato ovunque, stile terminale.`},system:{label:`Sistema`,description:`Caratteri del sistema operativo, nessun download.`}},rolesHeading:`Caratteri per ruolo`,rolesHint:`Sostituisci qualsiasi ruolo sopra il set. I ruoli segnati «Come …» seguono il ruolo principale.`,roles:{ui:{label:`Interfaccia e pannelli`,hint:`Pulsanti, menu, barre laterali, elenchi e impostazioni.`},display:{label:`Titoli`,hint:`Titoli di pagina e di sezione.`},reading:{label:`Chat e documenti`,hint:`Risposte dell’assistente, markdown e messaggi della casella.`},code:{label:`Codice in linea e dati`,hint:`Blocchi di codice, log, ID e dati tabellari.`},editor:{label:`Editor di codice`,hint:`Editor di file Monaco e vista delle differenze.`},terminal:{label:`Terminale`,hint:`Sessioni del terminale integrato.`}},fromPreset:`Set ({{name}})`,inherit:`Come {{role}} ({{name}})`,categories:{sans:`Senza grazie`,serif:`Con grazie`,mono:`Monospaziato`},systemTag:`sistema`,sizeHeading:`Dimensione e spaziatura`,sizeHint:`La dimensione del testo dell’interfaccia scala tutti i pannelli; editor e terminale si impostano in pixel.`,sizePresets:{compact:`Compatto`,normal:`Normale`,comfortable:`Comodo`,large:`Grande`,custom:`Personalizzato`},controls:{uiScale:{label:`Dimensione del testo dell’interfaccia`,hint:`Scala il testo di pannelli, chat e finestre di dialogo.`},editorFontSize:{label:`Dimensione carattere dell’editor`,hint:`Editor Monaco e vista delle differenze.`},codeLineHeight:{label:`Interlinea del codice`,hint:`Editor, vista delle differenze e blocchi di codice.`},terminalFontSize:{label:`Dimensione carattere del terminale`,hint:`Terminale integrato.`},terminalLineHeight:{label:`Interlinea del terminale`,hint:`Spaziatura delle righe nel terminale.`},ligatures:{label:`Legature del codice`,hint:`Unisce => !== >= in un unico glifo nei caratteri che le supportano (Fira Code, Cascadia, JetBrains Mono…). Non si applica al terminale.`}},previewHeading:`Anteprima dal vivo`,preview:{heading:`Rifattorizza il caricatore di sessione`,body:`L’agente ha letto 12 file e proposto una modifica in due passaggi. Controlla le differenze prima di applicarla.`,label:`Etichetta di interfaccia`},resetAll:`Ripristina tutte le impostazioni dei caratteri`,resetOverrides:`Cancella le sostituzioni per ruolo`},N={description:`Manage the decision provider and see where Jev is used.`,loading:`Loading Jev settings…`,timeout:`No response from server. Reconnect and retry.`,route:`Decision provider`,routeChange:`Changing provider clears the previous key, endpoint and model. Enter a new key or use the provider environment variable.`,key:`API key`,keyHint:`Leave blank to keep the current key`,removeKey:`Remove saved key (environment key may still apply)`,endpoint:`Endpoint override`,model:`Model override`,defaultHint:`Empty uses provider default`,requestTimeout:`Request timeout (ms)`,featureHint:`Switches permit Jev usage. Actual use also depends on the prerequisites and triggers below.`,save:`Save Jev settings`,test:`Test saved connection`,testHint:`The test sends one small billed request. Save changes first. Restart existing sessions to apply all consumers.`,activity:`Jev activity`,activityHint:`Refreshes every 3 seconds. Last 300 requests in this server process, across its sessions. No prompts, credentials or raw errors. Disk log rotates at 5 MB. Answered means a typed response, not necessarily a decision accepted by the consumer.`,filter:`Feature`,all:`All`,empty:`No matching Jev requests yet. Test the connection or use an enabled feature.`,features:{brain:`Brain decisions`,memoryTriage:`Memory triage`,topicShift:`Topic changes`,memoryRecall:`Memory recall`,compaction:`Context compaction`,kanbanVerify:`Kanban verification`,modelTier:`Subagent model tier`,semanticLint:`Semantic lint`,tool:`Strumento decisionale per agenti`,skillSuggestion:`Skill suggestions`,fleetDispatch:`Fleet dispatch`},readinessScope:`These are saved profile conditions, not the live state of every session. A request below means the service was called, not that its answer was accepted.`,unknownReadiness:`Readiness unavailable on this server`,unsaved:`Unsaved change`,lastRequest:`Last runtime request`,notObserved:`No runtime request in the displayed recent log.`,contextStrategy:`Profile compaction strategy`,contextScope:`Selective enables the Jev selection path. Save changes and restart existing sessions; a session-specific strategy can override this profile setting.`,openContext:`Open session context settings`,configureTiers:`Configure model tiers`,tiersHint:`Enable tiers and define at least two levels, cheapest first. Set their models or fallback profiles and a default tier. Changes here save immediately.`,checkHeading:`Live capability checks`,checkHint:`Runs 22 synthetic cases across all 11 features using the saved account, including disabled features. Makes billed API calls, sends no project content and changes no feature settings. Passing does not prove workload quality or that a session uses the feature.`,checkAll:`Test all 11 features`,checkRunning:`Running live checks…`,expected:`Expected`,actual:`Actual`,includeChecks:`Include diagnostic requests`,selfTest:`Diagnostic`,account:{ready:`Account configured`,unconfigured:`Account required`,unusable:`Account settings invalid`},readiness:{disabled:`Disabled`,"account-required":`Account required`,blocked:`Setup required`,conditional:`Configured · waiting for trigger`},reasons:{disabled:`This feature is not permitted to use Jev.`,"account-required":`Configure a valid Jev account first.`,"selective-required":`Jev selection requires selective compaction; hybrid and intelligent do not use this selector.`,"tiers-disabled":`The model tier system is disabled.`,"tiers-required":`Define at least two model tiers.`,"skills-disabled":`The global skills feature is disabled.`,"trigger-required":`Runs only when its trigger conditions are met.`,"memory-disabled":`Memory or SAGE is disabled.`,"recall-injection-required":`SAGE turn context recall is disabled; the Jev recall filter requires this path.`},triggers:{brain:`Runs before later decision tiers; uncertain answers defer.`,memoryTriage:`Runs during triage value evaluation and merge decisions.`,topicShift:`Runs when topic-change prechecks require a judgment; repeated results may be cached.`,memoryRecall:`Filters candidates returned by SAGE turn context recall; cached judgments are reused.`,compaction:`Rates middle conversation turns during selective compaction; requires a provider and sufficient history.`,kanbanVerify:`Judges open agent-type criteria against changed files and their diff.`,modelTier:`Suggests a tier for delegations with no explicit model/tier and no matching role/phase route.`,semanticLint:`Runs when the semantic lint command finds candidates; it is not an automatic edit watcher.`,tool:`Si attiva quando un agente chiama jev con prove e domande tipizzate.`,skillSuggestion:`Requires skills enabled, at least two skills, and gate/fit thresholds; results may be cached.`,fleetDispatch:`Runs only for ambiguous routing with multiple candidate roles.`},recallTurnContext:`SAGE turn context recall`,recallTurnHint:`Adds relevant memories to each new turn; the Jev recall filter runs on this path. Memory and SAGE must also be enabled. Save and restart existing sessions.`,logContent:`Record full request/response content in the log file`,logContentHint:`Writes the state sent, the full question wording and the answers with their distributions to the Jev log file. This view stays metadata-only either way, and the account key is scrubbed. Turn it off when you are done. Save and restart existing sessions.`,logContentOn:`Full request/response content is recorded in this file. It is never shown here.`,logContentOff:`Metadata only. Full request/response content is not recorded.`},P={title:e,subtitle:t,navigation:n,providerTest:r,tabs:i,model:a,connection:o,provider:s,providerModels:c,mcp:l,allowlist:u,oauth:d,general:f,agent:p,execution:m,fallbacks:h,fleet:g,integrations:_,features:v,context:y,logs:b,security:x,toast:S,display:C,resetLabel:w,cancel:T,resetConfirmTitle:E,resetConfirmBody:D,resetConfirmAction:O,brain:k,brainOpt:A,modelSchema:j,fonts:M,jev:N};export{p as agent,u as allowlist,k as brain,A as brainOpt,T as cancel,o as connection,y as context,P as default,C as display,m as execution,h as fallbacks,v as features,g as fleet,M as fonts,f as general,_ as integrations,N as jev,b as logs,l as mcp,a as model,j as modelSchema,n as navigation,d as oauth,s as provider,c as providerModels,r as providerTest,O as resetConfirmAction,D as resetConfirmBody,E as resetConfirmTitle,w as resetLabel,x as security,t as subtitle,i as tabs,e as title,S as toast};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./react-core-wiHys0m2.js";import{t}from"./utils-
|
|
1
|
+
import{t as e}from"./react-core-wiHys0m2.js";import{t}from"./utils-B21Devim.js";var n=e(),r=[`fact`,`decision`,`convention`,`preference`,`warning`,`anti_pattern`,`workflow`,`bug_root_cause`,`file_note`,`symbol_note`,`command_note`,`summary`],i=[`active`,`stale`,`superseded`,`contradicted`,`archived`,`deleted`],a=[`active`,`stale`,`superseded`,`contradicted`,`archived`],o=[`project`,`user`,`session`,`file`,`symbol`],s=[`file`,`directory`,`symbol`,`package`,`command`,`test`,`git`,`agent`],c={fact:`Fact`,decision:`Decision`,convention:`Convention`,preference:`Preference`,warning:`Warning`,anti_pattern:`Anti-pattern`,workflow:`Workflow`,bug_root_cause:`Root cause`,file_note:`File note`,symbol_note:`Symbol note`,command_note:`Command note`,summary:`Summary`};function l(e){let t=[];return e.roles?.length&&t.push(`roles: ${e.roles.join(`, `)}`),e.taskTypes?.length&&t.push(`tasks: ${e.taskTypes.join(`, `)}`),e.modes?.length&&t.push(`modes: ${e.modes.join(`, `)}`),t.join(` · `)}function u(){return{text:``,kind:`fact`,status:`active`,scope:`project`,tags:``,importance:.5,confidence:.8,freshness:1,anchors:[],audienceRoles:``,audienceTaskTypes:``,audienceModes:``,supersedes:``,contradicts:``}}function d(e){return{text:e.text,kind:e.kind,status:e.status,scope:e.scope,tags:e.tags.join(`, `),importance:e.importance,confidence:e.confidence,freshness:e.freshness,anchors:e.anchors.map(e=>({...e})),audienceRoles:(e.audience?.roles??[]).join(`, `),audienceTaskTypes:(e.audience?.taskTypes??[]).join(`, `),audienceModes:(e.audience?.modes??[]).join(`, `),supersedes:(e.supersedes??[]).join(`, `),contradicts:(e.contradicts??[]).join(`, `)}}function f(e){return[...new Set(e.split(`,`).map(e=>e.trim()).filter(Boolean))]}function p(e,t=170){let n=e.replace(/\s+/g,` `).trim();return n.length>t?`${n.slice(0,t-1)}…`:n}function m(e){if(!e)return`Never`;let t=Date.parse(e);return Number.isFinite(t)?new Intl.DateTimeFormat(void 0,{month:`short`,day:`numeric`,year:`numeric`,hour:`2-digit`,minute:`2-digit`}).format(t):`Unknown`}function h(e){if(!e)return`never`;let t=Date.parse(e);if(!Number.isFinite(t))return`unknown`;let n=Math.max(0,Math.round((Date.now()-t)/1e3));return n<60?`just now`:n<3600?`${Math.round(n/60)}m ago`:n<86400?`${Math.round(n/3600)}h ago`:n<604800?`${Math.round(n/86400)}d ago`:m(e)}function g(e){return e>=.85?`high`:e>=.55?`medium`:`low`}function _(e){switch(e){case`active`:return`border-success/35 bg-success/10 text-success`;case`stale`:return`border-warning/40 bg-warning/10 text-warning`;case`contradicted`:return`border-destructive/40 bg-destructive/10 text-destructive`;case`superseded`:return`border-warning/30 bg-warning/5 text-warning`;case`archived`:return`border-info/35 bg-info/10 text-info`;case`deleted`:return`border-border bg-muted text-muted-foreground`}}function v(e){return e===`warning`||e===`anti_pattern`||e===`bug_root_cause`?`text-destructive`:e===`decision`||e===`workflow`?`text-warning`:e===`convention`||e===`preference`?`text-success`:e===`file_note`||e===`symbol_note`||e===`command_note`?`text-info`:`text-foreground`}function y(e){return e.path??e.command??e.role??``}function b(e,t){return e.type===`command`?{type:e.type,command:t}:e.type===`agent`?{type:e.type,role:t}:{type:e.type,path:t,...e.type===`symbol`&&e.symbol?{symbol:e.symbol}:{}}}function x(e){let t=[];for(let n of e){let e=y(n).trim(),r=n.symbol?.trim();if(e||r){if(n.type===`command`){t.push({type:`command`,command:e});continue}if(n.type===`agent`){t.push({type:`agent`,role:e.toLowerCase()});continue}t.push({type:n.type,...e?{path:e}:{},...r?{symbol:r}:{}})}}return t}function S({status:e}){return(0,n.jsxs)(`span`,{className:t(`inline-flex items-center gap-1 border px-2 py-0.5 text-[10px] font-bold uppercase`,_(e)),children:[(0,n.jsx)(`span`,{className:`size-1.5 bg-current`,"aria-hidden":`true`}),e]})}function C({label:e,value:r,hint:i,tone:a=`default`}){return(0,n.jsxs)(`div`,{className:`border border-border/70 bg-card/55 px-3 py-2.5 shadow-[inset_0_1px_0_hsl(var(--foreground)/0.035)]`,children:[(0,n.jsx)(`p`,{className:`text-[9px] font-bold uppercase tracking-[0.16em] text-muted-foreground`,children:e}),(0,n.jsxs)(`div`,{className:`mt-1 flex items-end justify-between gap-2`,children:[(0,n.jsx)(`p`,{className:t(`font-mono text-xl font-bold tabular-nums`,a===`success`?`text-success`:a===`warning`?`text-warning`:a===`info`?`text-info`:`text-foreground`),children:r}),(0,n.jsx)(`p`,{className:`truncate text-[9px] text-muted-foreground`,children:i})]})]})}function w({id:e,label:t,value:r,onChange:i}){return(0,n.jsxs)(`div`,{className:`border border-border/65 bg-background/35 p-3`,children:[(0,n.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,n.jsx)(`label`,{htmlFor:e,className:`text-[10px] font-bold uppercase tracking-[0.14em] text-muted-foreground`,children:t}),(0,n.jsxs)(`span`,{className:`font-mono text-xs font-bold tabular-nums text-info`,children:[Math.round(r*100),`% · `,g(r)]})]}),(0,n.jsx)(`input`,{id:e,type:`range`,min:`0`,max:`1`,step:`0.05`,value:r,onChange:e=>i(Number.parseFloat(e.target.value)),className:`mt-3 h-1.5 w-full cursor-pointer accent-[hsl(var(--info))]`})]})}export{x as _,o as a,b,w as c,d,u as f,p as g,v as h,r as i,S as l,m,a as n,i as o,l as p,c as r,C as s,s as t,y as u,h as v,f as y};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import{Bt as e,Ot as t,Pt as n,Tt as r,j as i}from"./config-store-Cb4iyhGv.js";import{Co as a,So as o,bo as s,xo as c}from"./vendor-BfBvt432.js";import"./i18n-CzTjKT4L.js";import"./mailbox-store-DyOOYbni.js";import"./ui-store-DI0iusYZ.js";import"./chat-store-BMwP_sS0.js";import"./codemap-activity-store-WjfEZe4_.js";var l=`__bug_hunt_continuation_pending__`,u=c()(s((e,t)=>({runs:{},start:(t,n)=>e(e=>({runs:{...e.runs,[t]:n}})),ownsRequest:(e,n)=>{let r=t().runs[e];return!!(r&&n!==void 0&&r.requestId!==null&&r.requestId!==l&&r.requestId===n)},advance:(n,r)=>{let i=t().runs[n];if(!i||i.requestId===l||r!==void 0&&i.requestId!==null&&i.requestId!==r)return null;if(i.currentRound>=i.totalRounds)return t().clear(n),null;let a={...i,currentRound:i.currentRound+1,requestId:l};return e(e=>({runs:{...e.runs,[n]:a}})),a},setRequestId:(t,n)=>e(e=>{let r=e.runs[t];return!r||r.requestId!==l?e:{runs:{...e.runs,[t]:{...r,requestId:n}}}}),stop:(e,n)=>{let r=t().runs[e];!r||n&&r.requestId!==null&&r.requestId!==n||t().clear(e)},recover:(t,n)=>e(e=>({runs:{...e.runs,[t]:{...n,requestId:null}}})),clear:t=>e(e=>{let{[t]:n,...r}=e.runs;return{runs:r}})}),{name:`wrongstack-bug-hunt-runs`,partialize:e=>({runs:e.runs})})),d=8;function f(i,s={}){let c=Math.max(1,s.max??d),l=new Map,u=e=>e&&e.length>0?e:r,f=e=>{let t=u(e),n=l.get(t);if(n)return n;for(;l.size>=c;){let e=[...l.keys()].find(e=>e!==t);if(e===void 0)break;l.delete(e)}let r=a(i);return l.set(t,r),r},p=(t=>{let n=o(e,e=>e.activeSessionId);return o(f(n),t)});return p.getState=()=>f(t()).getState(),p.setState=e=>f(t()).setState(e),p.subscribe=e=>f(t()).subscribe(e),p.for=f,p.dropSession=e=>{l.delete(u(e))},p.sessionIds=()=>[...l.keys()],n(e=>p.dropSession(e)),p}function p(e,t){return t>=100?`danger`:`warning`}function m(e,t){switch(e){case`budget.threshold_reached`:{let e=t,n=e.limit>0?Math.round(e.used/e.limit*100):0;return`${e.subagentId} [${e.kind}] ${n}% (${e.used}/${e.limit})`}case`budget.decision`:{let e=t;return`${e.subagentId} [${e.kind}] → ${e.decision}`}case`consensus.vote_initiated`:{let e=t;return`Vote: "${e.title}" — ${e.eligible.length} voters`}case`consensus.vote_cast`:{let e=t;return`${e.voterId} voted ${e.value}`}case`consensus.vote_resolved`:{let e=t;return`${e.result} — ✅${e.approveCount} ❌${e.rejectCount}`}case`task.pending`:return`Task queued: "${t.description.slice(0,60)}"`;case`task.started`:{let e=t;return`${e.subagentId} started ${e.taskId}`}case`task.completed`:{let e=t;return`Task ${e.taskId} ${e.status} (${e.durationMs}ms)`}case`task.failed`:{let e=t;return`Task ${e.taskId} failed: ${e.error.slice(0,60)}`}case`subagent.budget_extended`:{let e=t;return`${e.subagentId} [${e.kind}] extended → ${e.extendedTo}ms`}default:return e}}var h=200,ee=50,g=300,_=200,v=100;function y(e,t,n){if(!(e.size<=t)){if(n)for(let[r,i]of e){if(e.size<=t)break;n(i)&&e.delete(r)}for(let n of e.keys()){if(e.size<=t)break;e.delete(n)}}}var b=f(e=>({coordinatorStatus:`idle`,subagents:new Map,events:[],consensusVotes:new Map,tasks:new Map,taskCounts:{pending:0,running:0,completed:0,failed:0},budgetAlerts:[],lastUpdated:Date.now(),setCoordinatorStatus:(t,n)=>e(e=>({coordinatorStatus:t,coordinatorMode:n,lastUpdated:Date.now()})),updateCoordinatorStats:t=>e(e=>{let n=new Map(e.subagents);for(let e of t.subagentStatuses??[]){let t=n.get(e.id);n.set(e.id,{id:e.id,name:e.name,role:t?.role??`agent`,status:e.status,currentTask:e.currentTask,budgetLimits:t?.budgetLimits,budgetUsage:t?.budgetUsage,lastSeen:t?.lastSeen??Date.now()})}return y(n,_,e=>e.status===`stopped`),{subagents:n,taskCounts:{pending:t.pending,running:t.inFlight,completed:t.completed,failed:0},lastUpdated:Date.now()}}),updateSubagentBudget:(t,n)=>e(e=>{let r=new Map(e.subagents),i=r.get(t);return r.set(t,{id:t,name:i?.name??t,role:i?.role??`agent`,status:i?.status??`idle`,...i,...n,lastSeen:Date.now()}),y(r,_,e=>e.status===`stopped`),{subagents:r,lastUpdated:Date.now()}}),pushEvent:(t,n,r,i,a)=>e(e=>{let o=n.kind??t,s=(t.includes(`budget`)||t.includes(`threshold`))&&typeof n.limit==`number`&&n.limit>0?Math.round(n.used/n.limit*100):void 0,c=s===void 0?t.includes(`consensus.vote_resolved`)?`info`:t.includes(`consensus.vote_initiated`)?`warning`:`info`:s>=100?`danger`:s>=85?`warning`:`info`;return{events:[{id:`${r}-${t}`,ts:r,type:t,subagentId:i,taskId:a,payload:n,kind:o,level:c,message:m(t,n)},...e.events].slice(0,h),lastUpdated:Date.now()}}),pushConsensusVote:(t,n,r)=>e(e=>{let i=new Map(e.consensusVotes);return i.set(t,{changeId:t,title:n,status:`pending`,eligible:r,votes:[],approveCount:0,rejectCount:0,abstainCount:0,expiresAt:Date.now()+3e5}),y(i,v,e=>e.status!==`pending`),{consensusVotes:i,lastUpdated:Date.now()}}),recordConsensusVote:(t,n,r,i)=>e(e=>{let a=new Map(e.consensusVotes),o=a.get(t);if(!o)return{};let s={...o,votes:[...o.votes.filter(e=>e.agentId!==n),{agentId:n,agentName:r,value:i,votedAt:Date.now()}],approveCount:i===`approve`?o.approveCount+1:o.approveCount,rejectCount:i===`reject`?o.rejectCount+1:o.rejectCount,abstainCount:i===`abstain`?o.abstainCount+1:o.abstainCount};return a.set(t,s),{consensusVotes:a,lastUpdated:Date.now()}}),resolveConsensusVote:(t,n,r,i)=>e(e=>{let a=new Map(e.consensusVotes),o=a.get(t);return o?(a.set(t,{...o,status:n,approveCount:r,rejectCount:i,resolvedAt:Date.now()}),{consensusVotes:a,lastUpdated:Date.now()}):{}}),pushTaskPending:(t,n,r)=>e(e=>{let i=new Map(e.tasks);return i.set(t,{id:t,description:n,status:`pending`,priority:r,queuedAt:Date.now()}),y(i,g,e=>e.status===`completed`||e.status===`failed`),{tasks:i,taskCounts:{...e.taskCounts,pending:e.taskCounts.pending+1},lastUpdated:Date.now()}}),startTask:(t,n)=>e(e=>{let r=new Map(e.tasks),i=r.get(t);return i?r.set(t,{...i,status:`running`,subagentId:n,startedAt:Date.now()}):r.set(t,{id:t,description:``,status:`running`,subagentId:n,startedAt:Date.now()}),{tasks:r,taskCounts:{...e.taskCounts,pending:Math.max(0,e.taskCounts.pending-1),running:e.taskCounts.running+1},lastUpdated:Date.now()}}),completeTask:(t,n,r)=>e(e=>{let i=new Map(e.tasks),a=i.get(t);return a&&i.set(t,{...a,status:n,completedAt:Date.now(),durationMs:r}),y(i,g,e=>e.status===`completed`||e.status===`failed`),{tasks:i,taskCounts:{...e.taskCounts,running:Math.max(0,e.taskCounts.running-1),completed:n===`completed`?e.taskCounts.completed+1:e.taskCounts.completed,failed:n===`failed`?e.taskCounts.failed+1:e.taskCounts.failed},lastUpdated:Date.now()}}),failTask:(t,n)=>e(e=>{let r=new Map(e.tasks),i=r.get(t);return i&&r.set(t,{...i,status:`failed`,error:n,completedAt:Date.now()}),y(r,g,e=>e.status===`completed`||e.status===`failed`),{tasks:r,taskCounts:{...e.taskCounts,running:Math.max(0,e.taskCounts.running-1),failed:e.taskCounts.failed+1},lastUpdated:Date.now()}}),recordBudgetDecision:(t,n,r,i)=>e(e=>{let a=new Map;for(let t of e.budgetAlerts){let e=`${t.subagentId}:${t.kind}`;a.has(e)||a.set(e,t)}let o=`${t}:${n}`,s=a.get(o);return s&&a.set(o,{...s,decision:r,newLimit:i,level:r===`extend`?`warning`:`danger`}),{budgetAlerts:Array.from(a.values()),lastUpdated:Date.now()}}),recordBudgetAlert:(t,n,r,i)=>e(e=>{let a=`${Date.now()}-${t}-${n}`,o=i>0?Math.round(r/i*100):0;return{budgetAlerts:[{id:a,ts:Date.now(),subagentId:t,kind:n,level:p(n,o),used:r,limit:i,pct:o},...e.budgetAlerts].slice(0,ee),lastUpdated:Date.now()}}),recordBudgetExtended:(t,n,r)=>e(e=>{let i=new Map(e.subagents),a=i.get(t);if(a?.budgetLimits){let e={...a.budgetLimits};n===`timeout`&&r&&(e.timeoutMs=r),n===`iterations`&&(e.maxIterations=r),n===`tool_calls`&&(e.maxToolCalls=r),i.set(t,{...a,budgetLimits:e,lastSeen:Date.now()})}return{subagents:i,lastUpdated:Date.now()}}),clear:()=>e({coordinatorStatus:`idle`,coordinatorMode:void 0,subagents:new Map,events:[],consensusVotes:new Map,tasks:new Map,taskCounts:{pending:0,running:0,completed:0,failed:0},budgetAlerts:[],lastUpdated:Date.now()})}),{max:4});function x(e,t){return{seatId:C(e.seatId)??`seat`,persona:C(e.persona)??`voter`,status:C(e.status)??`valid`,optionId:C(e.optionId),stance:C(e.stance),rationale:C(e.rationale),providerId:C(e.providerId),model:C(e.model),veto:T(e.veto),weight:w(e.weight),durationMs:w(e.durationMs),error:C(e.error),round:w(e.round),changed:T(e.changed),at:w(e.at)??t}}function te(e){if(e.phase===`voting`){let t=e.seats.reduce((e,t)=>Math.max(e,t.round??1),1),n=e.seats.filter(e=>(e.round??1)===t).length;return`voting${t>1?` r${t}`:``} · ${n} seat${n===1?``:`s`} in`}let t=e.configuredSeatCount??e.seats.length,n=[e.resolution??e.status??`resolved`,`${e.validVoteCount??e.seats.length}/${t} seats`,`${e.distinctTargetCount??0} distinct target${e.distinctTargetCount===1?``:`s`}`];if(e.rounds!==void 0&&e.rounds>1){let t=e.deliberationChanges??0;n.push(`${e.rounds} rounds${t>0?`, ${t} changed`:`, none changed`}`)}return e.judgeUsed&&n.push(`judge${e.judgeLabel?` ${e.judgeLabel}`:``}`+(e.judgeIsVoter?` (also a voter)`:``)),e.durationMs!==void 0&&n.push(`${Math.round(e.durationMs/100)/10}s`),e.totalTokens&&n.push(`${e.totalTokens} tok`),n.join(` · `)}function S(e,t,n,r){let i=e.findIndex(e=>e.requestId===t);if(i>=0){let t=e[i],n=r(t);if(n===t)return e;let a=[...e];return a[i]=n,a}return[r({requestId:t,phase:`voting`,startedAt:n,seats:[]}),...e].slice(0,50)}var ne=f(e=>({panels:[],questions:new Map,recordVote:t=>{let n=C(t.requestId);if(!n)return;let r=w(t.at),i=r??Date.now();e(e=>({panels:S(e.panels,n,i,a=>{let o=C(t.seatId)??`seat`,s=x(t,i),c=a.seats.find(e=>e.seatId===o),l=a.question??e.questions.get(n);return a.phase===`resolved`&&(r===void 0?!c:r>(a.resolvedAt??a.startedAt))?{requestId:n,phase:`voting`,startedAt:i,seats:[s],question:l}:a.phase===`resolved`&&a.hasFinalVotes?a:c?(s.round??1)<(c.round??1)||(s.round??1)===(c.round??1)&&s.at<c.at?a:{...a,question:l,seats:a.seats.map(e=>e.seatId===o?s:e)}:{...a,question:l,seats:[...a.seats,s]}})}))},recordResolution:t=>{let n=C(t.requestId);if(!n)return;let r=w(t.at),i=r??Date.now(),a=t.usage;e(e=>({panels:S(e.panels,n,i,o=>r!==void 0&&(r<o.startedAt||o.resolvedAt!==void 0&&r<=o.resolvedAt)?o:{...o,question:o.question??e.questions.get(n),phase:`resolved`,hasFinalVotes:Array.isArray(t.votes),seats:Array.isArray(t.votes)?t.votes.filter(e=>e&&typeof e==`object`&&!Array.isArray(e)).map(e=>x(e,i)):o.seats,resolvedAt:w(t.at)??i,status:C(t.status),resolution:C(t.resolution),optionId:C(t.optionId),reason:C(t.reason),configuredSeatCount:w(t.configuredSeatCount),validVoteCount:w(t.validVoteCount),distinctTargetCount:w(t.distinctTargetCount),judgeUsed:T(t.judgeUsed),judgeLabel:C(t.judgeLabel),judgeIsVoter:T(t.judgeIsVoter),rounds:w(t.rounds),deliberationChanges:w(t.deliberationChanges),totalTokens:w(a?.totalTokens),durationMs:w(a?.durationMs),warnings:Array.isArray(t.warnings)?t.warnings.filter(e=>typeof e==`string`):void 0})}))},noteQuestion:(t,n)=>{let r=n.trim();t&&r&&e(e=>{let n=e.panels.findIndex(e=>e.requestId===t);if(n<0){if(e.questions.get(t)===r)return e;let n=new Map(e.questions);for(n.delete(t),n.set(t,r);n.size>50;)n.delete(n.keys().next().value);return{questions:n}}let i=e.panels[n];if(i.question===r)return e;let a=[...e.panels];return a[n]={...i,question:r},{panels:a}})},clear:()=>e({panels:[],questions:new Map})}));function C(e){return typeof e==`string`&&e.trim()?e:void 0}function w(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}function T(e){return typeof e==`boolean`?e:void 0}var E=c()(e=>({snapshot:null,lastFiredAt:{},revision:0,setSnapshot:t=>e(e=>({snapshot:t,revision:e.revision+1})),recordFired:(t,n)=>e(e=>({lastFiredAt:{...e.lastFiredAt,[t]:n},revision:e.revision+1})),clear:()=>e({snapshot:null,lastFiredAt:{},revision:0})}));function D(){return`ref_${Date.now()}_${Math.random().toString(36).slice(2,8)}`}function O(e){switch(e.split(`.`).pop()?.toLowerCase()??``){case`ts`:case`tsx`:return`typescript`;case`js`:case`jsx`:return`javascript`;case`json`:return`json`;case`md`:case`mdx`:return`markdown`;case`css`:return`css`;case`scss`:return`scss`;case`html`:case`htm`:return`html`;case`py`:return`python`;case`rs`:return`rust`;case`go`:return`go`;case`rb`:return`ruby`;case`java`:return`java`;case`c`:return`c`;case`cpp`:case`hpp`:return`cpp`;case`h`:return`c`;case`sh`:case`bash`:return`bash`;case`sql`:return`sql`;case`yaml`:case`yml`:return`yaml`;case`toml`:return`toml`;default:return``}}function k(e,t=20,n=2e3){let r=e.split(`
|
|
2
|
+
`),i=!1,a=e;return r.length>t&&(a=r.slice(0,t).join(`
|
|
3
|
+
`),i=!0),a.length>n&&(a=a.slice(0,n),i=!0),i&&(a=a.replace(/\s+$/,``)+`
|
|
4
|
+
…`),{text:a,truncated:i}}function A(e){return e.length===0?``:[`[File reference contract]`,`Before answering or modifying anything related to these references, use the available file-reading tools to read each complete project file:`,...e.map(e=>`- ${JSON.stringify(e)}`),`If a read is paginated or chunked, continue on the same path until EOF. Do not treat an inline preview as the complete file.`].join(`
|
|
5
|
+
`)}function j(e,t){if(e.length===0)return``;let n=[],r=new Set;for(let i of e){if(i.kind===`file`){let e=t?.[i.path];if(e){let t=O(i.path),a=t?`\`\`\`${t}`:"```",o=k(e),s=o.truncated?`preview; complete read required`:`entire file`;n.push(`${a}\n// ${i.path} (${s})\n${o.text}\n\`\`\``),o.truncated&&r.add(i.path)}else n.push(`@${i.path}`),r.add(i.path);continue}let e=O(i.path),a=e?`\`\`\`${e}`:"```",o=`// ${i.path}:${i.startLine}-${i.endLine}`,s=k(i.kind===`snippet`?i.content:i.preview);n.push(`${a}\n${o}\n${s.text}\n\`\`\``),s.truncated&&r.add(i.path)}let i=A([...r]);return[...n,i].filter(Boolean).join(`
|
|
6
|
+
|
|
7
|
+
`)}var re=c()((e,t)=>({refs:[],addRef:n=>{let r=t();if(n.kind===`file`&&r.refs.find(e=>e.kind===`file`&&e.path===n.path))return;let i={...n,id:D()};e({refs:[...r.refs,i]})},removeRef:t=>{e(e=>({refs:e.refs.filter(e=>e.id!==t)}))},clearRefs:()=>e({refs:[]})})),ie=c()(e=>({info:null,setInfo:t=>e({info:t}),clear:()=>e({info:null})})),ae=c()((e,t)=>({result:null,loading:!1,currentSeq:0,setResult:t=>e(e=>t.reqSeq===e.currentSeq?{result:t,loading:!1}:{}),setLoading:()=>e({loading:!0,result:null}),clear:()=>e({result:null,loading:!1}),nextSeq:()=>{let n=t().currentSeq+1;return e({currentSeq:n}),n}})),M=c()(e=>({phases:[],activePhaseId:null,overallPercent:0,autonomous:!1,title:null,graphId:null,goal:null,status:`idle`,multiBoard:!1,lastEvent:null,lastError:null,graphs:[],progress:null,finalVerification:null,setState:t=>e(e=>({phases:t.phases??e.phases,activePhaseId:t.activePhaseId===void 0?e.activePhaseId:t.activePhaseId,overallPercent:t.overallPercent??e.overallPercent,autonomous:t.autonomous??e.autonomous,title:t.title===void 0?e.title:t.title,graphId:t.graphId===void 0?e.graphId:t.graphId,goal:t.goal===void 0?e.goal:t.goal,status:t.status??e.status,multiBoard:t.multiBoard??e.multiBoard,lastEvent:t.lastEvent===void 0?e.lastEvent:t.lastEvent,lastError:t.lastError===void 0?e.lastError:t.lastError,graphs:t.graphs??e.graphs,progress:t.progress===void 0?e.progress:t.progress,finalVerification:t.finalVerification===void 0?e.finalVerification:t.finalVerification})),clear:()=>e({phases:[],activePhaseId:null,overallPercent:0,autonomous:!1,title:null,graphId:null,goal:null,status:`idle`,multiBoard:!1,lastEvent:null,lastError:null,graphs:[],progress:null,finalVerification:null}),hydrateFromServer:e=>{e({type:`goal.list`}),e({type:`goal.status`})}}));function N(e){if(!e||typeof e!=`object`||Array.isArray(e))return!1;let t=e;return!(typeof t.iteration!=`number`||!Number.isFinite(t.iteration)||t.task!==void 0&&typeof t.task!=`string`||t.status!==void 0&&typeof t.status!=`string`||t.progress!==void 0&&(typeof t.progress!=`number`||!Number.isFinite(t.progress))||t.progressNote!==void 0&&typeof t.progressNote!=`string`||t.timestamp!==void 0&&typeof t.timestamp!=`string`)}function P(e){return!e||typeof e.goal!=`string`||!e.goal.trim()?null:{goal:e.goal,refinedGoal:typeof e.refinedGoal==`string`?e.refinedGoal:void 0,goalState:[`active`,`paused`,`completed`,`failed`,`abandoned`].includes(e.goalState)?e.goalState:`active`,iterations:typeof e.iterations==`number`?e.iterations:0,progress:typeof e.progress==`number`?e.progress:0,progressNote:typeof e.progressNote==`string`?e.progressNote:void 0,progressTrend:e.progressTrend===`accelerating`?`up`:e.progressTrend===`stalling`?`down`:e.progressTrend===`steady`?`stable`:void 0,deliverables:Array.isArray(e.deliverables)?e.deliverables.map((e,t)=>typeof e==`string`?{id:`d${t}`,text:e,status:/^\[[x✓]\]|✅|\(done\)/i.test(e)?`done`:`pending`}:e):void 0,journal:Array.isArray(e.journal)?e.journal.filter(N):void 0,lastTask:typeof e.lastTask==`string`?e.lastTask:void 0,lastStatus:typeof e.lastStatus==`string`?e.lastStatus:void 0}}var F=c()(e=>({goal:null,missionId:null,refiningMissionId:null,setGoal:t=>e(e=>{let n=typeof t?.missionId==`string`?t.missionId:typeof t?.setAt==`string`?t.setAt:null;return{goal:P(t),missionId:n,refiningMissionId:n===e.missionId?e.refiningMissionId:null}}),setRefining:(t,n)=>e(e=>e.missionId===t?{refiningMissionId:n?t:null}:e),clear:()=>e({goal:null,missionId:null,refiningMissionId:null}),appendJournalEntry:t=>e(e=>e.goal?{goal:{...e.goal,iterations:Math.max(e.goal.iterations,t.iteration),lastTask:t.task??e.goal.lastTask,lastStatus:t.status??e.goal.lastStatus,journal:[t,...e.goal.journal??[]].slice(0,200)}}:e),refresh:()=>{try{i()?.send?.({type:`goal-state.get`})}catch{}}}));function I(e,t){return e.presence?.some(e=>e.active)===!0||e.tags?.some(e=>e.startsWith(`session:`)&&t.includes(e.slice(8)))===!0}var L=3e5,R=c()((e,t)=>({boards:[],boardTotal:0,activeBoardTotal:0,orphanedBoardTotal:0,activeBoardId:null,activeBoard:null,loading:!1,lastOutboundAction:null,error:null,queueHealth:null,supervisorSnapshot:null,workbench:null,verificationActivity:{},boardHistory:[],fetchBoardHistory:e=>{t().sendKanban(`kanban.board.history`,{boardId:e})},setLoading:t=>e({loading:t}),sendKanban:(t,n)=>(e({loading:!0,lastOutboundAction:t}),t),transitionTask:(t,n,r,i)=>{let a=`kanban.task.transition`;return e({loading:!0,lastOutboundAction:a}),a},dispatchTask:(t,n,r)=>{let i=`kanban.task.dispatch`;return e({loading:!0,lastOutboundAction:i}),i},moveTask:(t,n,r)=>{let i=`kanban.task.move`;return e({loading:!0,lastOutboundAction:i}),i},removeTask:(t,n)=>{let r=`kanban.task.remove`;return e({loading:!0,lastOutboundAction:r}),r},setActiveBoardId:t=>e({activeBoardId:t,queueHealth:null,supervisorSnapshot:null,verificationActivity:{}}),setError:t=>e({error:t}),setQueueHealth:t=>e({queueHealth:t}),handleResult:(n,r)=>{if(!r.success){e({loading:!1,error:r.error??`Kanban request failed`});return}let i=r.data;if((n===`kanban.supervisor.status`||n===`kanban.supervisor.audit`)&&i){e({supervisorSnapshot:i,loading:!1,error:null});return}if(n===`kanban.health`&&r.data){e({queueHealth:r.data,loading:!1,error:null});return}if(n===`kanban.workbench`&&r.data){e({workbench:r.data,loading:!1,error:null});return}if(n===`kanban.list`){let t=U(i)?i:null,n=t?t.items:Array.isArray(i)?i:[];e({boards:n,boardTotal:t?.total??n.length,activeBoardTotal:t?.activeTotal??n.filter(e=>W(e)).length,orphanedBoardTotal:t?.orphanedTotal??n.filter(e=>!W(e)).length,loading:!1,error:null});return}if(n===`kanban.delete`){let n=t().activeBoardId,r=i,a=r?.removed===!0,o=r?.boardId??n;e(e=>{let t=a?e.boards.find(e=>e.id===o):void 0,n=t?W(t):void 0;return{boards:a?e.boards.filter(e=>e.id!==o):e.boards,boardTotal:a?Math.max(0,e.boardTotal-1):e.boardTotal,activeBoardTotal:n===!0?Math.max(0,e.activeBoardTotal-1):e.activeBoardTotal,orphanedBoardTotal:n===!1?Math.max(0,e.orphanedBoardTotal-1):e.orphanedBoardTotal,activeBoardId:a&&e.activeBoardId===o?null:e.activeBoardId,activeBoard:a&&e.activeBoard?.id===o?null:e.activeBoard,loading:!1,error:null}});return}if(n===`kanban.task.remove`){let t=i;e(e=>{let n=z(t?.board)?t.board:null;if(n&&e.activeBoardId===n.id)return{boards:q(e.boards,K(n)),activeBoard:n,loading:!1,error:null};let r=t?.boardId,i=t?.taskId,a=t?.removed===!0&&i&&e.activeBoard&&(!r||e.activeBoard.id===r)?{...e.activeBoard,tasks:e.activeBoard.tasks.filter(e=>e.id!==i)}:e.activeBoard;return{activeBoard:a,boards:a?q(e.boards,K(a)):e.boards,loading:!1,error:null}});return}if(n===`kanban.board.history`){Array.isArray(i)&&e({boardHistory:i});return}if(n===`kanban.task.verification_started`){let t=i;if(t?.boardId&&t.taskId){let n=`${t.boardId}:${t.taskId}`;e(e=>{let t=Date.now(),r=Object.fromEntries(Object.entries(e.verificationActivity).filter(([,e])=>t-e.startedAt<L));return r[n]={startedAt:t},{verificationActivity:r,loading:!1,error:null}})}return}if(n===`kanban.task.verification_completed`&&V(i)){let t=`${i.boardId}:${i.task.id}`;e(e=>{let n={...e.verificationActivity};if(delete n[t],e.activeBoard&&e.activeBoard.id===i.boardId){let t=J(e.activeBoard,i.task);return{verificationActivity:n,boards:q(e.boards,K(t)),activeBoard:t,loading:!1,error:null}}return{verificationActivity:n,loading:!1,error:null}});return}if(H(i)){let t=i.board;e(e=>({boards:q(e.boards,K(t)),activeBoard:e.activeBoardId===t.id?t:e.activeBoard,loading:!1,error:null}));return}if(V(i)){e(e=>{if(e.activeBoard&&e.activeBoard.id===i.boardId){let t=J(e.activeBoard,i.task);return{boards:q(e.boards,K(t)),activeBoard:t,loading:!1,error:null}}return{loading:!1,error:null}});return}if(z(i)){let t=K(i);if(n!==`kanban.create`&&n!==`kanban.duplicate`&&n!==`kanban.generate`){e(e=>({boards:q(e.boards,t),activeBoard:e.activeBoardId===i.id?i:e.activeBoard,loading:!1,error:null}));return}e(e=>({boards:q(e.boards,t),activeBoardId:i.id,activeBoard:i,loading:!1,error:null}));return}if(B(i)){e(e=>({...e.activeBoard?(()=>{let t=J(e.activeBoard,i);return{activeBoard:t,boards:q(e.boards,K(t))}})():{activeBoard:e.activeBoard},loading:!1,error:null}));return}if(Array.isArray(i)&&i.every(G)){e(e=>({...e.activeBoard?(()=>{let t={...e.activeBoard,columns:i};return{activeBoard:t,boards:q(e.boards,K(t))}})():{activeBoard:e.activeBoard},loading:!1,error:null}));return}e({loading:!1,error:null})}}));function z(e){return!!e&&typeof e==`object`&&Array.isArray(e.columns)&&Array.isArray(e.tasks)}function B(e){return!!e&&typeof e==`object`&&typeof e.title==`string`}function V(e){return!!e&&typeof e==`object`&&typeof e.boardId==`string`&&B(e.task)}function H(e){return!!e&&typeof e==`object`&&z(e.board)}function U(e){return!!e&&typeof e==`object`&&Array.isArray(e.items)&&typeof e.total==`number`}function W(e){return I(e,[])}function G(e){return!!e&&typeof e==`object`&&typeof e.id==`string`}function K(e){return{id:e.id,title:e.title,description:e.description,tags:e.tags,presence:e.presence,createdAt:e.createdAt,updatedAt:e.updatedAt,columnCount:e.columns.length,taskCount:e.tasks.length,completedTaskCount:e.tasks.filter(e=>e.status===`completed`).length}}function q(e,t){return[t,...e.filter(e=>e.id!==t.id)].sort((e,t)=>t.updatedAt.localeCompare(e.updatedAt))}function J(e,t){let n=e.tasks.some(e=>e.id===t.id)?e.tasks.map(e=>e.id===t.id?t:e):[...e.tasks,t];return{...e,tasks:n}}function oe(e){switch(e){case`tui`:return`tui`;case`cli`:case`repl`:return`repl`;case`webui`:return`webui`;default:return`webui`}}function se(e){let t={tui:0,webui:0,repl:0},n=0,r=0,i={toolCalls:0,costUsd:0,tokensIn:0,tokensOut:0};for(let a of e){t[oe(a.clientType)]+=1;for(let e of a.agents)n+=1,(e.status===`running`||e.status===`streaming`)&&(r+=1),i.toolCalls+=e.toolCalls??0,i.costUsd+=e.costUsd??0,i.tokensIn+=e.tokensIn??0,i.tokensOut+=e.tokensOut??0}return{clientCounts:t,totalAgents:n,activeAgents:r,aggregate:i}}function ce(e){if(e!==void 0)return Number.isFinite(e)?Math.max(0,Math.min(100,Math.round(e))):0}function le(e){return e.map(e=>({...e,agents:e.agents.map(e=>({...e,ctxPct:ce(e.ctxPct)}))}))}var ue=0,Y=c()(e=>({clientCounts:{tui:0,webui:0,repl:0},mailActivity:[],totalMessages:0,openMessages:0,unreadMessages:0,totalAgents:0,activeAgents:0,currentSession:{},liveSessions:[],aggregate:{toolCalls:0,costUsd:0,tokensIn:0,tokensOut:0},lastUpdated:Date.now(),setClientCounts:t=>e({clientCounts:t,lastUpdated:Date.now()}),setLiveSessions:t=>{let n=le(t),r=Y.getState().liveSessions;if(r.length===n.length){let e=!0;for(let t=0;t<n.length;t++){let i=n[t],a=r[t];if(i.sessionId!==a.sessionId||i.status!==a.status||i.agentCount!==a.agentCount||i.startedAt!==a.startedAt||i.lastHeartbeatAt!==a.lastHeartbeatAt){e=!1;break}let o=i.agents??[],s=a.agents??[];if(o.length!==s.length){e=!1;break}for(let t=0;t<o.length;t++)if(o[t].id!==s[t].id||o[t].name!==s[t].name||o[t].status!==s[t].status||o[t].currentTool!==s[t].currentTool||o[t].iterations!==s[t].iterations||o[t].toolCalls!==s[t].toolCalls||o[t].ctxPct!==s[t].ctxPct||o[t].tokensIn!==s[t].tokensIn||o[t].tokensOut!==s[t].tokensOut||o[t].costUsd!==s[t].costUsd||o[t].recentTools?.[0]?.id!==s[t].recentTools?.[0]?.id||o[t].recentMail?.[0]?.id!==s[t].recentMail?.[0]?.id||o[t].activity?.reads!==s[t].activity?.reads||o[t].activity?.writes!==s[t].activity?.writes||o[t].activity?.edits!==s[t].activity?.edits||o[t].activity?.terminalCalls!==s[t].activity?.terminalCalls||o[t].activity?.mailReceived!==s[t].activity?.mailReceived||o[t].activity?.mailSent!==s[t].activity?.mailSent||o[t].activity?.linesAdded!==s[t].activity?.linesAdded||o[t].activity?.linesRemoved!==s[t].activity?.linesRemoved){e=!1;break}if(!e)break}if(e)return}e({liveSessions:n,...se(n),lastUpdated:Date.now()})},addMailActivity:t=>e(e=>({mailActivity:[{...t,seq:t.seq??++ue},...e.mailActivity].slice(0,50),lastUpdated:Date.now()})),setMailStats:(t,n,r)=>e({totalMessages:t,openMessages:n,unreadMessages:r,lastUpdated:Date.now()}),setAgentStats:(t,n)=>e({totalAgents:t,activeAgents:n,lastUpdated:Date.now()}),setCurrentSession:t=>e({currentSession:{...Y.getState().currentSession,...t},lastUpdated:Date.now()}),clear:()=>e({clientCounts:{tui:0,webui:0,repl:0},mailActivity:[],totalMessages:0,openMessages:0,unreadMessages:0,totalAgents:0,activeAgents:0,currentSession:{},liveSessions:[],aggregate:{toolCalls:0,costUsd:0,tokensIn:0,tokensOut:0},lastUpdated:Date.now()})})),de=[3e4,6e4,12e4,3e5,6e5],X=12e4,fe=c()(s(e=>({viewMode:`office`,showHud:!0,showLegend:!0,showMinimap:!0,showControls:!0,animateEdges:!0,showFeed:!0,background:`dots`,waitThresholdMs:X,setViewMode:t=>e({viewMode:t}),setShowHud:t=>e({showHud:t}),setShowLegend:t=>e({showLegend:t}),setShowMinimap:t=>e({showMinimap:t}),setShowControls:t=>e({showControls:t}),setAnimateEdges:t=>e({animateEdges:t}),setShowFeed:t=>e({showFeed:t}),setBackground:t=>e({background:t}),setWaitThresholdMs:t=>e({waitThresholdMs:Number.isFinite(t)&&t>0?Math.round(t):X})}),{name:`wrongstack-officemap`}));function Z(e){return`${e.providerId}\u0000${e.meterId}`}function pe(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.providerId==`string`&&typeof t.meterId==`string`&&Array.isArray(t.windows)&&typeof t.capturedAt==`number`}var me=c(e=>({meters:{},apply:t=>e(e=>{let n={...e.meters};for(let e of t){if(!pe(e))continue;let t=n[Z(e)];n[Z(e)]={...e,...e.planLabel===void 0&&t?.planLabel!==void 0?{planLabel:t.planLabel}:{},...e.meterLabel===void 0&&t?.meterLabel!==void 0?{meterLabel:t.meterLabel}:{}}}return{meters:n}}),clear:()=>e({meters:{}})}));function he(e){let t;for(let n of Object.values(e))for(let e of n.windows){if(!t||e.usedPercent>t.window.usedPercent){t={snapshot:n,window:e};continue}if(e.usedPercent===t.window.usedPercent){let r=e.resetsAt,i=t.window.resetsAt;r!==void 0&&(i===void 0||r<i)&&(t={snapshot:n,window:e})}}return t}function ge(e){if(e.label)return e.label;let t=e.windowMinutes;return t!==void 0&&Number.isFinite(t)&&t>0?t%1440==0?`${t/1440}d`:t%60==0?`${t/60}h`:`${t}m`:e.id}function _e(e,t=Date.now()){if(e?.resetsAt===void 0)return;let n=e.resetsAt*1e3-t;if(n<=0)return;let r=Math.floor(n/6e4);if(r<1)return`${Math.max(1,Math.round(n/1e3))}s`;let i=Math.floor(r/1440),a=Math.floor(r%1440/60),o=r%60;return i>0?a>0?`${i}d ${a}h`:`${i}d`:a>0?o>0?`${a}h ${o}m`:`${a}h`:`${o}m`}var Q=e=>`${e.providerId}\u0000${e.model}`,ve=c(e=>({entries:{},audit:[],summary:null,loading:!1,error:null,update:t=>e(e=>{let n={...e.entries},r=Q(t);if(t.state===`healthy`)delete n[r];else{let e=n[r],i=Object.fromEntries(Object.entries(t).filter(e=>e[1]!==void 0));n[r]={...e,...i}}return{entries:n}}),hydrate:t=>e({entries:Object.fromEntries(t.filter(e=>e.state!==`healthy`).map(e=>[Q(e),e]))}),applySnapshot:t=>{let n=t.statuses;if(!Array.isArray(n)){e({error:`Invalid snapshot from server`,loading:!1});return}let r={};for(let e of n){if(!e||typeof e!=`object`)continue;let t=e,n=typeof t.providerId==`string`?t.providerId:``,i=typeof t.model==`string`?t.model:``;if(!n||!i)continue;let a=t.state;(a===`healthy`||a===`degraded`||a===`blocked`)&&(r[`${n}\u0000${i}`]={providerId:n,model:i,state:a,reason:(typeof t.lastErrorKind==`string`?t.lastErrorKind:``)||a,updatedAt:typeof t.lastFailureAt==`number`?t.lastFailureAt:Date.now(),...typeof t.stateExpiresAt==`number`?{stateExpiresAt:t.stateExpiresAt}:{},...typeof t.consecutiveFailures==`number`?{consecutiveFailures:t.consecutiveFailures}:{},...typeof t.totalFailures==`number`?{totalFailures:t.totalFailures}:{},...typeof t.rateLimitHits==`number`?{rateLimitHits:t.rateLimitHits}:{},...typeof t.lastErrorMessage==`string`?{lastErrorMessage:t.lastErrorMessage}:{},...typeof t.lastErrorKind==`string`?{lastErrorKind:t.lastErrorKind}:{},...typeof t.lastErrorStatus==`number`?{lastErrorStatus:t.lastErrorStatus}:{},...Array.isArray(t.recentErrors)?{recentErrors:t.recentErrors.slice(0,20)}:{},...typeof t.lastSessionId==`string`?{lastSessionId:t.lastSessionId}:{},...typeof t.lastAgentId==`string`?{lastAgentId:t.lastAgentId}:{},...typeof t.lastFailureAt==`number`?{lastFailureAt:t.lastFailureAt}:{}})}let i=t;e({entries:r,summary:{totalPairs:typeof i.totalPairs==`number`?i.totalPairs:0,healthy:typeof i.healthy==`number`?i.healthy:0,degraded:typeof i.degraded==`number`?i.degraded:0,blocked:typeof i.blocked==`number`?i.blocked:0,totalFailures:typeof i.totalFailures==`number`?i.totalFailures:0,totalRateLimits:typeof i.totalRateLimits==`number`?i.totalRateLimits:0},error:null,loading:!1})},setAudit:t=>e({audit:t}),setLoading:t=>e({loading:t}),setError:t=>e({error:t,loading:!1}),removeEntry:(t,n)=>e(e=>{let r={...e.entries};return delete r[Q({providerId:t,model:n})],{entries:r}}),clear:()=>e({entries:{},audit:[],summary:null,error:null})})),ye=c()(e=>({snapshot:null,boards:[],lifecycleResult:null,destroying:!1,setSnapshot:t=>e({snapshot:t}),setBoards:t=>e({boards:t}),setLifecycleResult:t=>e({lifecycleResult:t}),setDestroying:t=>e({destroying:t})})),be=f(e=>({sideEffects:[],loading:!1,setSideEffects:t=>e({sideEffects:t,loading:!1}),setLoading:t=>e({loading:t}),clear:()=>e({sideEffects:[],loading:!1})})),xe=c()(e=>({specs:[],detail:null,expandedSpecId:null,setSpecs:t=>e({specs:t}),setDetail:t=>e({detail:t}),setExpanded:t=>e({expandedSpecId:t,detail:null})})),Se=new Set([`idle`,`queued`,`discovering`,`inventorying`,`enriching`,`researching`,`synthesizing`,`completed`,`failed`,`cancelled`]);function Ce(e){return Se.has(e)?e:void 0}var $={snapshot:null,stale:!1,loading:!1,error:null,activeJob:null,lastWorkspaceId:null,reportId:null,selectedDepth:`full`,selectedModel:null,availableModels:null,remediationPlan:null,remediationPreview:null,remediationLoading:!1,remediationError:null,trend:null,trendLoading:!1,trendError:null,deepDivePartial:null},we=c()(e=>({...$,setSnapshot:(t,n=!1)=>e(e=>({snapshot:t,stale:n,loading:!1,error:null,activeJob:e.activeJob?{...e.activeJob,status:`completed`,error:null}:null,deepDivePartial:null})),setLoading:t=>e({loading:t}),setError:t=>e({error:t,loading:!1}),jobStarted:(t,n,r)=>e({activeJob:{id:t,kind:n,status:`queued`,progress:null,error:null,...r?.depth?{depth:r.depth}:{},...r?.model?{model:r.model}:{}},error:null,loading:!0}),jobProgress:(t,n)=>e(e=>{if(e.activeJob?.id!==t)return e;let r=Ce(n.phase);return r?{activeJob:{...e.activeJob,status:r,progress:n},loading:!0}:e}),jobFailed:(t,n)=>e(e=>e.activeJob?.id===t?{activeJob:{...e.activeJob,status:`failed`,error:n},error:n,loading:!1}:e),jobCancelled:t=>e(e=>({activeJob:e.activeJob?.id===t?{...e.activeJob,status:`cancelled`,error:null}:e.activeJob,loading:!1})),workspaceCompleted:t=>e({lastWorkspaceId:t}),reportReady:t=>e({reportId:t}),setSelectedDepth:t=>e({selectedDepth:t}),setSelectedModel:t=>e({selectedModel:t}),setAvailableModels:t=>e({availableModels:t}),setRemediation:(t,n)=>e({remediationPlan:t,remediationPreview:n,remediationLoading:!1,remediationError:null}),setRemediationLoading:t=>e({remediationLoading:t,...t?{remediationError:null}:{}}),setRemediationError:t=>e({remediationError:t,remediationLoading:!1}),setTrend:t=>e({trend:t,trendLoading:!1,trendError:null}),setTrendLoading:t=>e({trendLoading:t,...t?{trendError:null}:{}}),setTrendError:t=>e({trendError:t,trendLoading:!1}),setDeepDivePartial:t=>e({deepDivePartial:t}),clear:()=>e($)})),Te=c()(e=>({worktrees:[],baseBranch:``,activity:[],orphans:[],canClean:!1,cleanResult:null,mergeResult:null,diffByDir:{},setSnapshot:(t,n)=>e({worktrees:t,baseBranch:n}),pushEvent:t=>e(e=>({activity:[...e.activity,t].slice(-40)})),setOrphans:(t,n,r)=>e({orphans:t,canClean:n,cleanBlockedReason:r}),setCleanResult:t=>e({cleanResult:t}),setMergeResult:t=>e({mergeResult:t}),setDiff:(t,n)=>e(e=>({diffByDir:{...e.diffByDir,[t]:n}}))}));export{te as C,u as D,f as E,E as S,b as T,M as _,ye as a,j as b,ge as c,de as d,fe as f,F as g,I as h,be as i,he as l,R as m,we as n,ve as o,Y as p,xe as r,_e as s,Te as t,me as u,ae as v,ne as w,re as x,ie as y};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={saved:`Sessão salva`,loaded:`Sessão carregada`,deleted:`Sessão excluída`},t={generic:`Algo deu errado.`,connectionLost:`Conexão perdida. Reconectando…`,reconnected:`Reconectado.`},n={title:`Notificações`,unreadCount:`{{count}} não lidas`,allRead:`Tudo em dia`,markAllRead:`Marcar todas como lidas`,clearAll:`Limpar tudo`,tabAll:`Todas`,tabUnread:`Não lidas`,filterType:`Mostrar`,filterImportant:`Avisos e erros`,filterAll:`Todos os tipos`,filterErrors:`Erros`,filterWarnings:`Avisos`,filterSuccess:`Sucessos`,filterInfo:`Informações`,emptyFiltered:`Nenhuma notificação correspondente`,emptyFilteredHint:`Escolha outro tipo para ver mais notificações.`,empty:`Nenhuma notificação`,emptyHint:`As notificações do sistema aparecerão aqui.`,markAsRead:`Marcar como lida`,remove:`Remover notificação`,justNow:`Agora mesmo`,secondsAgo:`há {{count}} s`,minutesAgo:`há {{count}} min`,hoursAgo:`há {{count}} h`,daysAgo:`há {{count}} d`},r={session:e,error:t,menu:n};export{r as default,t as error,n as menu,e as session};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={saved:`Sesión guardada`,loaded:`Sesión cargada`,deleted:`Sesión eliminada`},t={generic:`Algo salió mal.`,connectionLost:`Conexión perdida. Reconectando…`,reconnected:`Reconectado.`},n={title:`Notificaciones`,unreadCount:`{{count}} sin leer`,allRead:`Todo al día`,markAllRead:`Marcar todo como leído`,clearAll:`Borrar todo`,tabAll:`Todas`,tabUnread:`Sin leer`,filterType:`Mostrar`,filterImportant:`Advertencias y errores`,filterAll:`Todos los tipos`,filterErrors:`Errores`,filterWarnings:`Advertencias`,filterSuccess:`Éxitos`,filterInfo:`Información`,emptyFiltered:`No hay notificaciones que coincidan`,emptyFilteredHint:`Elige otro tipo para ver más notificaciones.`,empty:`No hay notificaciones`,emptyHint:`Las notificaciones y avisos del sistema aparecerán aquí.`,markAsRead:`Marcar como leído`,remove:`Eliminar notificación`,justNow:`Ahora mismo`,secondsAgo:`hace {{count}} s`,minutesAgo:`hace {{count}} m`,hoursAgo:`hace {{count}} h`,daysAgo:`hace {{count}} d`},r={session:e,error:t,menu:n};export{r as default,t as error,n as menu,e as session};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e}from"./rolldown-runtime-hePW80VL.js";var t=e({default:()=>a,error:()=>r,menu:()=>i,session:()=>n}),n={saved:`Session saved`,loaded:`Session loaded`,deleted:`Session deleted`},r={generic:`Something went wrong.`,connectionLost:`Connection lost. Reconnecting…`,reconnected:`Reconnected.`},i={title:`Notifications`,unreadCount:`{{count}} unread`,allRead:`All caught up`,markAllRead:`Mark all as read`,clearAll:`Clear all`,tabAll:`All`,tabUnread:`Unread`,filterType:`Show`,filterImportant:`Warnings and errors`,filterAll:`Every type`,filterErrors:`Errors`,filterWarnings:`Warnings`,filterSuccess:`Success`,filterInfo:`Information`,emptyFiltered:`No matching notifications`,emptyFilteredHint:`Choose another type to see more notifications.`,empty:`No notifications`,emptyHint:`Toasts and system notifications will appear here.`,markAsRead:`Mark as read`,remove:`Remove notification`,justNow:`Just now`,secondsAgo:`{{count}}s ago`,minutesAgo:`{{count}}m ago`,hoursAgo:`{{count}}h ago`,daysAgo:`{{count}}d ago`},a={session:n,error:r,menu:i};export{t as n,a as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={saved:`Sessione salvata`,loaded:`Sessione caricata`,deleted:`Sessione eliminata`},t={generic:`Qualcosa è andato storto.`,connectionLost:`Connessione persa. Riconnessione…`,reconnected:`Riconnesso.`},n={title:`Notifiche`,unreadCount:`{{count}} non lette`,allRead:`Tutto in pari`,markAllRead:`Segna tutte come lette`,clearAll:`Cancella tutto`,tabAll:`Tutte`,tabUnread:`Non lette`,filterType:`Mostra`,filterImportant:`Avvisi ed errori`,filterAll:`Tutti i tipi`,filterErrors:`Errori`,filterWarnings:`Avvisi`,filterSuccess:`Operazioni riuscite`,filterInfo:`Informazioni`,emptyFiltered:`Nessuna notifica corrispondente`,emptyFilteredHint:`Scegli un altro tipo per vedere più notifiche.`,empty:`Nessuna notifica`,emptyHint:`Le notifiche di sistema appariranno qui.`,markAsRead:`Segna come letta`,remove:`Rimuovi notifica`,justNow:`Proprio ora`,secondsAgo:`{{count}}s fa`,minutesAgo:`{{count}} min fa`,hoursAgo:`{{count}} ore fa`,daysAgo:`{{count}} gg fa`},r={session:e,error:t,menu:n};export{r as default,t as error,n as menu,e as session};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={saved:`Oturum kaydedildi`,loaded:`Oturum yüklendi`,deleted:`Oturum silindi`},t={generic:`Bir şeyler ters gitti.`,connectionLost:`Bağlantı koptu. Yeniden bağlanıyor…`,reconnected:`Yeniden bağlandı.`},n={title:`Bildirimler`,unreadCount:`{{count}} okunmamış`,allRead:`Tümü okundu`,markAllRead:`Tümünü okundu işaretle`,clearAll:`Tümünü temizle`,tabAll:`Tümü`,tabUnread:`Okunmamış`,filterType:`Göster`,filterImportant:`Uyarılar ve hatalar`,filterAll:`Tüm türler`,filterErrors:`Hatalar`,filterWarnings:`Uyarılar`,filterSuccess:`Başarılı işlemler`,filterInfo:`Bilgiler`,emptyFiltered:`Eşleşen bildirim yok`,emptyFilteredHint:`Diğer bildirimler için farklı bir tür seçin.`,empty:`Henüz bildirim yok`,emptyHint:`Sistem bildirimleri ve uyarılar burada listelenir.`,markAsRead:`Okundu olarak işaretle`,remove:`Bildirimi kaldır`,justNow:`Az önce`,secondsAgo:`{{count}} sn önce`,minutesAgo:`{{count}} dk önce`,hoursAgo:`{{count}} sa önce`,daysAgo:`{{count}} gün önce`},r={session:e,error:t,menu:n};export{r as default,t as error,n as menu,e as session};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={saved:`Session enregistrée`,loaded:`Session chargée`,deleted:`Session supprimée`},t={generic:`Une erreur est survenue.`,connectionLost:`Connexion perdue. Reconnexion…`,reconnected:`Reconnecté.`},n={title:`Notifications`,unreadCount:`{{count}} non lue(s)`,allRead:`Tout est à jour`,markAllRead:`Tout marquer comme lu`,clearAll:`Tout effacer`,tabAll:`Toutes`,tabUnread:`Non lues`,filterType:`Afficher`,filterImportant:`Avertissements et erreurs`,filterAll:`Tous les types`,filterErrors:`Erreurs`,filterWarnings:`Avertissements`,filterSuccess:`Succès`,filterInfo:`Informations`,emptyFiltered:`Aucune notification correspondante`,emptyFilteredHint:`Choisissez un autre type pour voir plus de notifications.`,empty:`Aucune notification`,emptyHint:`Les notifications système apparaîtront ici.`,markAsRead:`Marquer comme lu`,remove:`Supprimer la notification`,justNow:`À l'instant`,secondsAgo:`il y a {{count}} s`,minutesAgo:`il y a {{count}} min`,hoursAgo:`il y a {{count}} h`,daysAgo:`il y a {{count}} j`},r={session:e,error:t,menu:n};export{r as default,t as error,n as menu,e as session};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={saved:`Sitzung gespeichert`,loaded:`Sitzung geladen`,deleted:`Sitzung gelöscht`},t={generic:`Etwas ist schiefgelaufen.`,connectionLost:`Verbindung verloren. Verbindung wird wiederhergestellt…`,reconnected:`Verbindung wiederhergestellt.`},n={title:`Benachrichtigungen`,unreadCount:`{{count}} ungelesen`,allRead:`Alles gelesen`,markAllRead:`Alle als gelesen markieren`,clearAll:`Alle löschen`,tabAll:`Alle`,tabUnread:`Ungelesen`,filterType:`Anzeigen`,filterImportant:`Warnungen und Fehler`,filterAll:`Alle Typen`,filterErrors:`Fehler`,filterWarnings:`Warnungen`,filterSuccess:`Erfolge`,filterInfo:`Informationen`,emptyFiltered:`Keine passenden Benachrichtigungen`,emptyFilteredHint:`Wählen Sie einen anderen Typ, um weitere Benachrichtigungen zu sehen.`,empty:`Keine Benachrichtigungen`,emptyHint:`Benachrichtigungen und Systemmeldungen werden hier angezeigt.`,markAsRead:`Als gelesen markieren`,remove:`Benachrichtigung entfernen`,justNow:`Gerade eben`,secondsAgo:`vor {{count}} s`,minutesAgo:`vor {{count}} Min.`,hoursAgo:`vor {{count}} Std.`,daysAgo:`vor {{count}} T.`},r={session:e,error:t,menu:n};export{r as default,t as error,n as menu,e as session};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{bo as e,xo as t}from"./vendor-BfBvt432.js";var n=[`chat`,`agents`,`files`,`changes`,`mailbox`,`skills`,`design`];function r(e){return n.includes(e)?e:e===`context`||e===`history`||e===`sessions`||e===`projects`?`chat`:e===`worktrees`?`changes`:`chat`}var i=`chat.settings.provider-test.memory.roster.context.goal.kanban.sddhub.files.changes.history.sessions.session-inspect.setup.skill.mailbox.debug.design-gallery.refresh-debug.analytics.codemap.techstack.chronicle.intake.deadcode.prompts.chimera`.split(`.`);function a(e){return i.includes(e)?e:`chat`}var o=[`goal`,`goal-state`,`fleet`,`work`,`worktrees`,`collab`,`browser`];function s(e){return e==null||!o.includes(e)?null:e}var c=[`general`,`fonts`,`provider`,`jev`,`connection`,`agent`,`execution`,`fallbacks`,`routing`,`fleet`,`integrations`,`chimera`,`context`,`logs`,`security`,`display`];function l(e){return c.includes(e)?e:`general`}function u(){if(typeof window>`u`)return!1;if(window.wrongstackDesktopHost)return!0;try{return new URLSearchParams(window.location.search).get(`shell`)===`desktop`}catch{return!1}}function d(e={}){return{currentView:`chat`,activeActivity:`chat`,sidebarOpen:e.sidebarOpen??!1,dockSection:null,chromeSessionId:null,chromeBySession:{},dockCustomizeOpen:!1,fleetMonitorOpen:!1,agentsMonitorOpen:!1,processMonitorOpen:!1,queuePanelOpen:!1,cronJobsOpen:!1,sideContextBreakdownOpen:!1,inspectorOpen:!1,inspectorTab:`fleet`,inspectorTarget:null,inspectorFocusedAgentId:null,subagentChatFocusId:null,subagentChatFocusSessionId:null,terminalOpen:!1,paletteOpen:!1,shortcutsOpen:!1,searchOpen:!1,searchQuery:``,searchActiveMessageId:null,modelSwitcherOpen:!1,promptLibraryOpen:!1,selectedMailMessage:null,refinePanel:null,skillsState:f(),chatSwitcherOpen:!1,chatCheckpointOpen:!1,chatMemoryPanelOpen:!1,chatContextBreakdownOpen:!1,chatContextEditorOpen:!1,chatToolStatsOpen:!1,chatInputCollapsed:!1}}function f(){return{selectedSkill:null,navHistory:[],historyIndex:-1,detailOpen:!1,knownRefs:{},updateAvailableCount:0}}function p(){return{sidebarOpen:!0,activeActivity:`chat`,currentView:`chat`,inspectSessionId:null,searchOpen:!1,searchQuery:``,searchActiveMessageId:null,scrollTarget:null,modelSwitcherOpen:!1,promptLibraryOpen:!1,promptInsertRequest:null,refinePanel:null,draftInput:``,draftImages:[],processMonitorOpen:!1,queuePanelOpen:!1,cronJobsOpen:!1,sideContextBreakdownOpen:!1,terminalOpen:!1,dockSection:null,workDashboardTab:`todos`,inspectorOpen:!1,inspectorTab:`fleet`,inspectorTarget:null,inspectorFocusedAgentId:null,agentRosterActiveTab:`live`,changesPanelTab:`changes`,dockCustomizeOpen:!1,skillsState:f(),selectedMailMessage:null,scrollPositions:{},chatSwitcherOpen:!1,chatCheckpointOpen:!1,chatMemoryPanelOpen:!1,chatContextBreakdownOpen:!1,chatContextEditorOpen:!1,chatToolStatsOpen:!1,chatInputCollapsed:!1}}function m(e){return{sidebarOpen:e.sidebarOpen,activeActivity:e.activeActivity,currentView:e.currentView,inspectSessionId:e.inspectSessionId,searchOpen:e.searchOpen,searchQuery:e.searchQuery,searchActiveMessageId:e.searchActiveMessageId,scrollTarget:e.scrollTarget,modelSwitcherOpen:e.modelSwitcherOpen,promptLibraryOpen:e.promptLibraryOpen,promptInsertRequest:e.promptInsertRequest,refinePanel:e.refinePanel,draftInput:e.draftInput,draftImages:e.draftImages,processMonitorOpen:e.processMonitorOpen,queuePanelOpen:e.queuePanelOpen,cronJobsOpen:e.cronJobsOpen,sideContextBreakdownOpen:e.sideContextBreakdownOpen,terminalOpen:e.terminalOpen,dockSection:e.dockSection,workDashboardTab:e.workDashboardTab,inspectorOpen:e.inspectorOpen,inspectorTab:e.inspectorTab,inspectorTarget:e.inspectorTarget,inspectorFocusedAgentId:e.inspectorFocusedAgentId,agentRosterActiveTab:e.agentRosterActiveTab,changesPanelTab:e.changesPanelTab,dockCustomizeOpen:e.dockCustomizeOpen,skillsState:e.skillsState,selectedMailMessage:e.selectedMailMessage,scrollPositions:e.scrollPositions,chatSwitcherOpen:e.chatSwitcherOpen,chatCheckpointOpen:e.chatCheckpointOpen,chatMemoryPanelOpen:e.chatMemoryPanelOpen,chatContextBreakdownOpen:e.chatContextBreakdownOpen,chatContextEditorOpen:e.chatContextEditorOpen,chatToolStatsOpen:e.chatToolStatsOpen,chatInputCollapsed:e.chatInputCollapsed}}function h(e,t){return e.chromeSessionId?{chromeBySession:{...e.chromeBySession,[e.chromeSessionId]:{...m(e),...t}}}:{}}var g={name:`wrongstack-ui`,version:8,migrate:(e,t)=>{let i=e??{};if(i.activeActivity=r(i.activeActivity),typeof i.sidebarWidth==`number`&&(i.sidebarWidth=Math.max(240,Math.min(560,i.sidebarWidth))),t<2&&(delete i.fleetDrawerOpen,delete i.agentsDrawerOpen),`currentView`in i&&(i.currentView=a(i.currentView)),`dockSection`in i&&(i.dockSection=s(i.dockSection)),`settingsActiveTab`in i&&(i.settingsActiveTab=l(i.settingsActiveTab)),`activityBarOrder`in i&&i.activityBarOrder!=null){let e=i.activityBarOrder,t=new Set(n),r=Array.isArray(e.panels)?Array.from(new Set(e.panels.filter(e=>typeof e==`string`&&t.has(e)))):[],o=Array.isArray(e.views)?Array.from(new Set(e.views.map(a))):[];i.activityBarOrder=r.length||o.length?{panels:r,views:o}:null}return t<6&&delete i.draftInput,t<7&&(delete i.chromeSessionId,delete i.chromeBySession),i},merge:(e,t)=>{let n={...t,...e??{}};return n.activeActivity=r(n.activeActivity),n.currentView=a(n.currentView),n.dockSection=s(n.dockSection),n.settingsActiveTab=l(n.settingsActiveTab),typeof n.chromeSessionId!=`string`&&(n.chromeSessionId=null),(typeof n.chromeBySession!=`object`||n.chromeBySession===null)&&(n.chromeBySession={}),n.sidebarWidth=Math.max(240,Math.min(560,n.sidebarWidth)),u()?{...n,...d({sidebarOpen:!1})}:n},partialize:e=>({sidebarOpen:e.sidebarOpen,activeActivity:e.activeActivity,sidebarWidth:e.sidebarWidth,promptHistory:e.promptHistory,pinnedIds:e.pinnedIds,compactMode:e.compactMode,favoriteSessionIds:e.favoriteSessionIds,sessionNicknames:e.sessionNicknames,fileExplorerWidth:e.fileExplorerWidth,refineEnabled:e.refineEnabled,hiddenChips:e.hiddenChips,workDashboardTab:e.workDashboardTab,inspectorOpen:e.inspectorOpen,inspectorTab:e.inspectorTab,skillsState:e.skillsState,activityBarOrder:e.activityBarOrder,currentView:e.currentView,dockSection:e.dockSection,settingsActiveTab:e.settingsActiveTab,scrollPositions:e.scrollPositions})},_=8388608,v=`application/pdf`;function y(e){return e.type===`application/pdf`||/\.pdf$/i.test(e.name)}function b(e){return e.mediaType===v}var x=2048,S=2097152,C=new Set([`image/png`,`image/jpeg`,`image/webp`,`image/gif`]),w=class extends Error{reason;constructor(e,t){super(e),this.reason=t,this.name=`ImageAttachmentError`}};function T(e){return new Promise((t,n)=>{let r=new FileReader;r.onload=()=>t(r.result),r.onerror=()=>n(r.error),r.readAsDataURL(e)})}function E(e){let t=e.indexOf(`,`),n=t>=0?e.length-t-1:e.length;return Math.floor(n*3/4)}function D(e){return/^data:([^;,]+)/.exec(e)?.[1]??`image/png`}async function O(e){try{return await createImageBitmap(e)}catch{let t=URL.createObjectURL(e);try{return await new Promise((e,n)=>{let r=new Image;r.onload=()=>e(r),r.onerror=()=>n(Error(`image decode failed`)),r.src=t})}finally{URL.revokeObjectURL(t)}}}function k(e,t,n,r,i){let a=document.createElement(`canvas`);a.width=t,a.height=n;let o=a.getContext(`2d`);if(!o)throw new w(`canvas 2d context unavailable`,`decode_failed`);o.drawImage(e,0,0,t,n);let s=a.toDataURL(`image/webp`,i);return s.startsWith(`data:image/webp`)?s:r?a.toDataURL(`image/png`):a.toDataURL(`image/jpeg`,i)}var A=0;function j(){return A+=1,`img_${Date.now()}_${A}`}async function M(e){let t=C.has(e.type),n;try{n=await O(e)}catch{throw new w(`Could not decode image "${e.name}"`,`decode_failed`)}let r=n.width,i=n.height,a=Math.max(r,i);if(!(!t||a>x||e.size>S)){let t=await T(e);return{id:j(),dataUrl:t,mediaType:e.type,bytes:E(t),name:e.name||void 0,width:r,height:i}}let o=e.type!==`image/jpeg`,s=Math.min(1,x/a),c=.85,l=k(n,Math.max(1,Math.round(r*s)),Math.max(1,Math.round(i*s)),o,c);E(l)>4194304&&(s=Math.min(s,1280/a),c=.7,l=k(n,Math.max(1,Math.round(r*s)),Math.max(1,Math.round(i*s)),o,c)),`close`in n&&n.close();let u=E(l);if(u>4194304)throw new w(`Image "${e.name}" is too large after compression`,`too_large`);return{id:j(),dataUrl:l,mediaType:D(l),bytes:u,name:e.name||void 0,width:Math.max(1,Math.round(r*s)),height:Math.max(1,Math.round(i*s))}}async function N(e){if(e.size>8388608)throw new w(`PDF "${e.name}" is too large`,`pdf_too_large`);let t;try{t=await T(e)}catch{throw new w(`Could not read "${e.name}"`,`pdf_read_failed`)}let n=t.indexOf(`,`);return{id:j(),dataUrl:`data:${v};base64,${n>=0?t.slice(n+1):``}`,mediaType:v,bytes:e.size,name:e.name||`document.pdf`}}function P(e){return e.map(e=>{let t=e.dataUrl.indexOf(`,`);return{data:t>=0?e.dataUrl.slice(t+1):e.dataUrl,mediaType:e.mediaType,...e.name?{name:e.name}:{}}})}var F=t()(e(e=>({sidebarOpen:!0,activeActivity:`chat`,settingsOpen:!1,currentView:`chat`,showConfirmDialog:!1,confirmInfo:null,paletteOpen:!1,shortcutsOpen:!1,searchOpen:!1,searchQuery:``,searchActiveMessageId:null,scrollTarget:null,promptHistory:[],sidebarWidth:304,pinnedIds:[],compactMode:!1,modelSwitcherOpen:!1,favoriteSessionIds:[],sessionNicknames:{},fileExplorerWidth:220,refineEnabled:!0,refinePanel:null,promptLibraryOpen:!1,promptInsertRequest:null,dockSection:null,workDashboardTab:`todos`,chromeSessionId:null,chromeBySession:{},hiddenChips:[],dockCustomizeOpen:!1,fleetMonitorOpen:!1,agentsMonitorOpen:!1,inspectorOpen:!1,inspectorTab:`fleet`,inspectorTarget:null,inspectorFocusedAgentId:null,subagentChatFocusId:null,subagentChatFocusSessionId:null,processMonitorOpen:!1,queuePanelOpen:!1,cronJobsOpen:!1,inspectSessionId:null,terminalOpen:!1,terminalCreateNonce:0,agentRosterActiveTab:`live`,changesPanelTab:`changes`,settingsActiveTab:`general`,scrollPositions:{},activityBarOrder:null,draftInput:``,draftImages:[],sideContextBreakdownOpen:!1,chatSwitcherOpen:!1,chatCheckpointOpen:!1,chatMemoryPanelOpen:!1,chatContextBreakdownOpen:!1,chatContextEditorOpen:!1,chatToolStatsOpen:!1,chatInputCollapsed:!1,selectedMailMessage:null,skillsState:f(),selectActivity:t=>e(e=>({activeActivity:t,...h(e,{activeActivity:t})})),toggleSidebar:()=>e(e=>{let t=!e.sidebarOpen;return{sidebarOpen:t,...h(e,{sidebarOpen:t})}}),setSidebarOpen:t=>e(e=>({sidebarOpen:t,...h(e,{sidebarOpen:t})})),setSettingsOpen:t=>e({settingsOpen:t}),setCurrentView:t=>e(e=>{let n=a(t);return{currentView:n,...h(e,{currentView:n})}}),showConfirm:t=>e({showConfirmDialog:!0,confirmInfo:t}),hideConfirm:()=>e({showConfirmDialog:!1,confirmInfo:null}),setPaletteOpen:t=>e({paletteOpen:t}),setShortcutsOpen:t=>e({shortcutsOpen:t}),setSearchOpen:t=>e(e=>({searchOpen:t,searchQuery:``,searchActiveMessageId:null,...h(e,{searchOpen:t,searchQuery:``,searchActiveMessageId:null})})),setSearchQuery:t=>e(e=>({searchQuery:t,...h(e,{searchQuery:t})})),setSearchActiveMessageId:t=>e(e=>({searchActiveMessageId:t,...h(e,{searchActiveMessageId:t})})),requestScrollToMessage:t=>e(e=>{let n={id:t,nonce:(e.scrollTarget?.nonce??0)+1};return{scrollTarget:n,...h(e,{scrollTarget:n})}}),pushPrompt:t=>e(e=>{let n=t.trim();return n?{promptHistory:[n,...e.promptHistory.filter(e=>e!==n)].slice(0,50)}:e}),setSidebarWidth:t=>e({sidebarWidth:Math.max(240,Math.min(560,Math.round(t)))}),togglePin:t=>e(e=>({pinnedIds:e.pinnedIds.includes(t)?e.pinnedIds.filter(e=>e!==t):[...e.pinnedIds,t]})),unpinAll:()=>e({pinnedIds:[]}),toggleCompactMode:()=>e(e=>({compactMode:!e.compactMode})),setModelSwitcherOpen:t=>e(e=>({modelSwitcherOpen:t,...h(e,{modelSwitcherOpen:t})})),toggleFavoriteSession:t=>e(e=>({favoriteSessionIds:e.favoriteSessionIds.includes(t)?e.favoriteSessionIds.filter(e=>e!==t):[...e.favoriteSessionIds,t]})),setSessionNickname:(t,n)=>e(e=>{let r=n.trim(),i={...e.sessionNicknames};return r?i[t]=r:delete i[t],{sessionNicknames:i}}),setFileExplorerWidth:t=>e({fileExplorerWidth:Math.max(160,Math.min(400,Math.round(t)))}),toggleRefineEnabled:()=>e(e=>({refineEnabled:!e.refineEnabled})),setRefinePanel:t=>e(e=>({refinePanel:t,...h(e,{refinePanel:t})})),setPromptLibraryOpen:t=>e(e=>({promptLibraryOpen:t,...h(e,{promptLibraryOpen:t})})),requestPromptInsert:t=>e(e=>({promptInsertRequest:t,promptLibraryOpen:!1,...h(e,{promptInsertRequest:t,promptLibraryOpen:!1})})),clearPromptInsert:()=>e(e=>({promptInsertRequest:null,...h(e,{promptInsertRequest:null})})),setDockSection:t=>e(e=>({dockSection:t,...h(e,{dockSection:t,inspectorOpen:!t&&e.inspectorOpen}),...t?{inspectorOpen:!1}:{}})),setWorkDashboardTab:t=>e(e=>({workDashboardTab:t,...h(e,{workDashboardTab:t})})),bindSessionChrome:t=>e(e=>{if(e.chromeSessionId===t)return{};let n={...e.chromeBySession};if(e.chromeSessionId){let t=m(e);n[e.chromeSessionId]=t.refinePanel?{...t,refinePanel:null,draftInput:t.refinePanel.original}:t}let r=(t?n[t]:void 0)??p();return{chromeSessionId:t,chromeBySession:n,subagentChatFocusId:null,subagentChatFocusSessionId:t,sidebarOpen:r.sidebarOpen??p().sidebarOpen,activeActivity:r.activeActivity,currentView:r.currentView,inspectSessionId:r.inspectSessionId,searchOpen:r.searchOpen,searchQuery:r.searchQuery,searchActiveMessageId:r.searchActiveMessageId,scrollTarget:r.scrollTarget,modelSwitcherOpen:r.modelSwitcherOpen,promptLibraryOpen:r.promptLibraryOpen,promptInsertRequest:r.promptInsertRequest,refinePanel:r.refinePanel,draftInput:r.draftInput,draftImages:r.draftImages,processMonitorOpen:r.processMonitorOpen,queuePanelOpen:r.queuePanelOpen,cronJobsOpen:r.cronJobsOpen,sideContextBreakdownOpen:r.sideContextBreakdownOpen,terminalOpen:r.terminalOpen,dockSection:r.dockSection,workDashboardTab:r.workDashboardTab,inspectorOpen:r.inspectorOpen,inspectorTab:r.inspectorTab,inspectorTarget:r.inspectorTarget,inspectorFocusedAgentId:r.inspectorFocusedAgentId,agentRosterActiveTab:r.agentRosterActiveTab,changesPanelTab:r.changesPanelTab,dockCustomizeOpen:r.dockCustomizeOpen??!1,skillsState:r.skillsState??f(),selectedMailMessage:r.selectedMailMessage??null,scrollPositions:r.scrollPositions??{},chatSwitcherOpen:r.chatSwitcherOpen??!1,chatCheckpointOpen:r.chatCheckpointOpen??!1,chatMemoryPanelOpen:r.chatMemoryPanelOpen??!1,chatContextBreakdownOpen:r.chatContextBreakdownOpen??!1,chatContextEditorOpen:r.chatContextEditorOpen??!1,chatInputCollapsed:r.chatInputCollapsed??!1}}),toggleDockSection:t=>e(e=>{let n=e.dockSection===t?null:t;return{dockSection:n,...h(e,{dockSection:n,inspectorOpen:!n&&e.inspectorOpen}),...n?{inspectorOpen:!1}:{}}}),toggleChipHidden:t=>e(e=>{let n=e.hiddenChips.includes(t),r=!n&&e.dockSection===t?null:e.dockSection;return{hiddenChips:n?e.hiddenChips.filter(e=>e!==t):[...e.hiddenChips,t],dockSection:r,...h(e,{dockSection:r})}}),showDockChip:t=>e(e=>({hiddenChips:e.hiddenChips.filter(e=>e!==t)})),setDockCustomizeOpen:t=>e(e=>({dockCustomizeOpen:t,...h(e,{dockCustomizeOpen:t})})),setAgentRosterActiveTab:t=>e(e=>({agentRosterActiveTab:t,...h(e,{agentRosterActiveTab:t})})),setChangesPanelTab:t=>e(e=>({changesPanelTab:t,...h(e,{changesPanelTab:t})})),setFleetMonitorOpen:t=>e(e=>({fleetMonitorOpen:!1,inspectorOpen:t?!0:e.inspectorTab!==`fleet`&&e.inspectorOpen,inspectorTab:t?`fleet`:e.inspectorTab,...h(e,{inspectorOpen:t?!0:e.inspectorTab!==`fleet`&&e.inspectorOpen,inspectorTab:t?`fleet`:e.inspectorTab,dockSection:t?null:e.dockSection}),...t?{dockSection:null}:{}})),setAgentsMonitorOpen:t=>e(e=>({agentsMonitorOpen:!1,inspectorOpen:t?!0:e.inspectorTab!==`agents`&&e.inspectorOpen,inspectorTab:t?`agents`:e.inspectorTab,...h(e,{inspectorOpen:t?!0:e.inspectorTab!==`agents`&&e.inspectorOpen,inspectorTab:t?`agents`:e.inspectorTab,dockSection:t?null:e.dockSection}),...t?{dockSection:null}:{}})),setInspectorOpen:t=>e(e=>({inspectorOpen:t,...t?{dockSection:null}:{inspectorTarget:null},...h(e,{inspectorOpen:t,dockSection:t?null:e.dockSection,inspectorTarget:t?e.inspectorTarget:null})})),setInspectorTab:t=>e(e=>({inspectorTab:t,...h(e,{inspectorTab:t})})),openInspectorTarget:t=>e(e=>{let n=e.inspectorTab,r=e.inspectorFocusedAgentId;return t.kind===`fleet`?n=t.tab??`fleet`:t.kind===`agent`?(n=`agents`,r=t.agentId):t.kind===`sideEffects`?n=`sideEffects`:t.kind===`council`&&(n=`council`),{inspectorOpen:!0,inspectorTarget:t,inspectorTab:n,inspectorFocusedAgentId:r,dockSection:null,...h(e,{inspectorOpen:!0,inspectorTarget:t,inspectorTab:n,inspectorFocusedAgentId:r,dockSection:null})}}),closeInspector:()=>e(e=>({inspectorOpen:!1,inspectorTarget:null,...h(e,{inspectorOpen:!1,inspectorTarget:null})})),setInspectorFocusedAgentId:t=>e(e=>({inspectorFocusedAgentId:t,...h(e,{inspectorFocusedAgentId:t})})),setSubagentChatFocus:(t,n)=>e(e=>({subagentChatFocusId:t,subagentChatFocusSessionId:(n===``?null:n)??e.chromeSessionId??e.subagentChatFocusSessionId??null})),forgetSession:t=>e(e=>{let n=e.subagentChatFocusSessionId===t,r=t in e.chromeBySession||e.chromeSessionId===t;if(!n&&!r)return e;let i={...e.chromeBySession};delete i[t];let a=e.subagentChatFocusSessionId===t,o=e.chromeSessionId===t;return{chromeBySession:i,...a?{subagentChatFocusId:null,subagentChatFocusSessionId:null}:{},...o?{chromeSessionId:null,...p()}:{}}}),toggleInspector:()=>e(e=>{let t=!e.inspectorOpen,n=t?null:e.dockSection;return{inspectorOpen:t,dockSection:n,...h(e,{inspectorOpen:t,dockSection:n})}}),setProcessMonitorOpen:t=>e(e=>({processMonitorOpen:t,...h(e,{processMonitorOpen:t})})),setQueuePanelOpen:t=>e(e=>({queuePanelOpen:t,...h(e,{queuePanelOpen:t})})),setCronJobsOpen:t=>e(e=>({cronJobsOpen:t,...h(e,{cronJobsOpen:t})})),setInspectSession:t=>e(e=>({inspectSessionId:t,currentView:`session-inspect`,...h(e,{inspectSessionId:t,currentView:`session-inspect`})})),clearInspectSession:()=>e(e=>({inspectSessionId:null,currentView:`chat`,...h(e,{inspectSessionId:null,currentView:`chat`})})),setTerminalOpen:t=>e(e=>({terminalOpen:t,...h(e,{terminalOpen:t})})),toggleTerminal:()=>e(e=>{let t=!e.terminalOpen;return{terminalOpen:t,...h(e,{terminalOpen:t})}}),requestTerminalCreate:()=>e(e=>({terminalCreateNonce:e.terminalCreateNonce+1})),setSettingsActiveTab:t=>e({settingsActiveTab:l(t)}),setScrollPosition:(t,n)=>e(e=>{let r={...e.scrollPositions,[t]:n};return{scrollPositions:r,...h(e,{scrollPositions:r})}}),setActivityBarOrder:t=>e({activityBarOrder:t}),setDraftInput:t=>e(e=>({draftInput:t,...h(e,{draftInput:t})})),setDraftImages:t=>e(e=>{let n=t.slice(-8);return{draftImages:n,...h(e,{draftImages:n})}}),setSideContextBreakdownOpen:t=>e(e=>({sideContextBreakdownOpen:t,...h(e,{sideContextBreakdownOpen:t})})),setChatSwitcherOpen:t=>e(e=>({chatSwitcherOpen:t,...h(e,{chatSwitcherOpen:t})})),setChatCheckpointOpen:t=>e(e=>({chatCheckpointOpen:t,...h(e,{chatCheckpointOpen:t})})),setChatMemoryPanelOpen:t=>e(e=>({chatMemoryPanelOpen:t,...h(e,{chatMemoryPanelOpen:t})})),setChatContextBreakdownOpen:t=>e(e=>({chatContextBreakdownOpen:t,...h(e,{chatContextBreakdownOpen:t})})),setChatToolStatsOpen:t=>e(e=>({chatToolStatsOpen:t,...h(e,{chatToolStatsOpen:t})})),setChatContextEditorOpen:t=>e(e=>({chatContextEditorOpen:t,...h(e,{chatContextEditorOpen:t})})),setChatInputCollapsed:t=>e(e=>({chatInputCollapsed:t,...h(e,{chatInputCollapsed:t})})),setSkillsState:t=>e(e=>({skillsState:t,...h(e,{skillsState:t})})),setSelectedMailMessage:t=>e(e=>({selectedMailMessage:t,...h(e,{selectedMailMessage:t})}))}),g));function I(e={}){F.setState(d(e))}export{b as a,N as c,_ as i,P as l,F as n,y as o,w as r,M as s,I as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{At as e,kt as t}from"./vendor-
|
|
1
|
+
import{At as e,kt as t}from"./vendor-BfBvt432.js";function n(...n){return t(e(n))}function r(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}export{r as n,n as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./react-core-wiHys0m2.js";import{
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./react-core-wiHys0m2.js";import{Fr as r,Pa as i,Qt as a}from"./vendor-BfBvt432.js";import{a as o,i as s,n as c,o as l,r as u,t as d}from"./dialog-BDUaV5gY.js";import{t as f}from"./button-UuKTnoM-.js";var p=e(t(),1);async function m(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 h(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)),t.similarity===!0&&n.set(`similarity`,`1`);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()}function g(e,t=170){let n=e.replace(/\s+/g,` `).trim();return n.length>t?`${n.slice(0,t-1)}…`:n}async function _(e,t={}){let n=await fetch(`${t.baseUrl??``}/api/vector-memory/store/${encodeURIComponent(e)}`,{method:`DELETE`,credentials:`include`});if(!n.ok)throw Error(`forget failed: HTTP ${n.status}`);return await n.json()}var v=n();function y({hit:e,busy:t,error:n,onCancel:i,onConfirm:p,onOpenChange:m}){return(0,v.jsx)(d,{open:e!==null,onOpenChange:m,children:(0,v.jsxs)(c,{className:`max-w-md`,children:[(0,v.jsxs)(o,{children:[(0,v.jsx)(`span`,{className:`mb-2 flex size-10 items-center justify-center border border-destructive/35 bg-destructive/10 text-destructive`,children:(0,v.jsx)(a,{className:`size-4`})}),(0,v.jsx)(l,{children:`Forget this vector memory?`}),(0,v.jsx)(u,{className:`leading-6`,children:`This removes the entry and its embedding from the vector memory store.`})]}),(0,v.jsx)(`div`,{className:`border border-border/70 bg-background/45 p-3 text-xs text-muted-foreground`,children:g(e?.text??``,180)}),n===void 0?null:(0,v.jsx)(`p`,{role:`alert`,className:`text-xs text-destructive`,children:n}),(0,v.jsxs)(s,{children:[(0,v.jsx)(f,{variant:`outline`,onClick:i,disabled:t,children:`Cancel`}),(0,v.jsxs)(f,{variant:`destructive`,onClick:p,disabled:t,children:[t?(0,v.jsx)(r,{className:`size-4 animate-spin`}):(0,v.jsx)(a,{className:`size-4`}),t?`Forgetting…`:`Forget memory`]})]})]})})}function b({baseUrl:e=``}={}){let[t,n]=(0,p.useState)(),[r,a]=(0,p.useState)(),[o,s]=(0,p.useState)(``),[c,l]=(0,p.useState)(10),[u,d]=(0,p.useState)(void 0),[f,b]=(0,p.useState)([]),[S,C]=(0,p.useState)(),[w,T]=(0,p.useState)(),[E,D]=(0,p.useState)(!1),[O,k]=(0,p.useState)(null),[A,j]=(0,p.useState)(null),[M,N]=(0,p.useState)(!1),[P,F]=(0,p.useState)(),[I,L]=(0,p.useState)(0),R=(0,p.useRef)(0),z=(0,p.useRef)(!1),B=(0,p.useRef)(e);(0,p.useEffect)(()=>{let t=!1;return B.current!==e&&(B.current=e,z.current=!1,n(void 0),a(void 0)),m(e).then(e=>{t||(z.current=!0,n(e),a(void 0))}).catch(e=>{t||z.current||(n(void 0),a(e instanceof Error?e.message:String(e)))}),()=>{t=!0}},[e,I]);let V=async()=>{let t=o.trim();if(t.length!==0){D(!0),T(void 0),k(null),j(null),F(void 0);try{let n=await h(t,{limit:c,...u===void 0?{}:{threshold:u},similarity:!0,baseUrl:e});b(n.hits),C(n.similarity)}catch(e){b([]),C(void 0),T(e instanceof Error?e.message:String(e))}finally{R.current+=1,D(!1)}}},H=async()=>{if(A===null)return;let t=A.id,n=R.current,r=f,i=S;N(!0),F(void 0);try{let{removed:a}=await _(t,{baseUrl:e});if(a){if(R.current===n){let e=r.findIndex(e=>e.id===t);b(r.filter(e=>e.id!==t)),i!==void 0&&e>=0&&C(i.filter((t,n)=>n!==e).map(t=>t.filter((t,n)=>n!==e))),O===t&&k(null)}j(e=>e?.id===t?null:e),L(e=>e+1)}else F(`The store reported the entry was not removed.`)}catch(e){F(e instanceof Error?e.message:String(e))}finally{N(!1)}};return r===void 0?t===void 0?(0,v.jsxs)(`div`,{className:`vector-memory-panel vector-memory-panel--loading`,children:[(0,v.jsx)(`h3`,{children:`Vector Memory`}),(0,v.jsx)(`p`,{children:`Loading status…`})]}):t.enabled?(0,v.jsxs)(`div`,{className:`vector-memory-panel`,children:[(0,v.jsx)(`h3`,{children:`Vector Memory`}),(0,v.jsxs)(`dl`,{className:`vector-memory-panel__status`,children:[(0,v.jsx)(`dt`,{children:`Active provider`}),(0,v.jsx)(`dd`,{children:(0,v.jsx)(`code`,{children:t.providerId??`unknown`})}),(0,v.jsx)(`dt`,{children:`Model`}),(0,v.jsx)(`dd`,{children:(0,v.jsx)(`code`,{children:t.modelId??`unknown`})}),(0,v.jsx)(`dt`,{children:`Dimensions`}),(0,v.jsx)(`dd`,{children:t.dimensions??`unknown`}),(0,v.jsx)(`dt`,{children:`Entries / vectors`}),(0,v.jsxs)(`dd`,{children:[t.entries??0,` / `,t.vectors??0]}),(0,v.jsx)(`dt`,{children:`Store path`}),(0,v.jsx)(`dd`,{children:(0,v.jsx)(`code`,{children:t.storePath??`(project root)`})}),(0,v.jsx)(`dt`,{children:`Model cache`}),(0,v.jsx)(`dd`,{children:(0,v.jsx)(`code`,{children:t.modelCacheDir??`(project root)`})}),(0,v.jsx)(`dt`,{children:`Providers`}),(0,v.jsx)(`dd`,{children:t.providers?.join(`, `)??``}),t.cache?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(`dt`,{children:`Embedding cache`}),(0,v.jsxs)(`dd`,{children:[t.cache.entries,` entries · `,t.cache.providers,` provider`,t.cache.providers===1?``:`s`,` · `,t.cache.totalUseCount,` hits`]})]}):null]}),(0,v.jsxs)(`div`,{className:`vector-memory-panel__search`,children:[(0,v.jsx)(`label`,{htmlFor:`vm-query`,children:`Query`}),(0,v.jsx)(`input`,{id:`vm-query`,type:`text`,value:o,onChange:e=>s(e.currentTarget.value),onKeyDown:e=>{e.key===`Enter`&&V()},placeholder:`apple banana`}),(0,v.jsxs)(`div`,{className:`vector-memory-panel__controls`,children:[(0,v.jsxs)(`label`,{children:[`limit`,(0,v.jsx)(`input`,{type:`number`,min:1,max:50,value:c,onChange:e=>l(Math.max(1,Math.min(50,Number(e.currentTarget.value)||10)))})]}),(0,v.jsxs)(`label`,{children:[`threshold`,(0,v.jsx)(`input`,{type:`number`,min:0,max:1,step:.05,value:u??``,onChange:e=>{let t=e.currentTarget.value;d(t===``?void 0:Number.parseFloat(t))}})]}),(0,v.jsx)(`button`,{type:`button`,onClick:()=>void V(),disabled:E,children:E?`Searching…`:`Search`})]})]}),w===void 0?null:(0,v.jsxs)(`p`,{className:`vector-memory-panel__error`,children:[`Search error: `,w]}),(0,v.jsxs)(`ol`,{className:`vector-memory-panel__hits`,children:[f.map(e=>{let t=O===e.id;return(0,v.jsxs)(`li`,{className:t?`vector-memory-panel__hit vector-memory-panel__hit--expanded`:`vector-memory-panel__hit`,children:[(0,v.jsxs)(`button`,{type:`button`,className:`vector-memory-panel__hit-toggle`,"aria-expanded":t,onClick:()=>k(t?null:e.id),children:[(0,v.jsx)(i,{"aria-hidden":`true`,className:t?`vector-memory-panel__hit-chevron vector-memory-panel__hit-chevron--open`:`vector-memory-panel__hit-chevron`}),(0,v.jsx)(`span`,{className:`vector-memory-panel__hit-score`,children:e.score.toFixed(3)}),e.summary?(0,v.jsx)(`span`,{className:`vector-memory-panel__hit-summary`,children:e.summary}):null]}),(0,v.jsx)(`p`,{className:`vector-memory-panel__hit-text`,children:t?e.text:g(e.text)}),e.tags.length>0?(0,v.jsx)(`p`,{className:`vector-memory-panel__hit-tags`,children:e.tags.map(e=>(0,v.jsx)(`span`,{className:`vector-memory-panel__hit-tag`,children:e},e))}):null,t?(0,v.jsxs)(`div`,{className:`vector-memory-panel__hit-detail`,children:[(0,v.jsxs)(`dl`,{className:`vector-memory-panel__hit-fields`,children:[(0,v.jsx)(`dt`,{children:`id`}),(0,v.jsx)(`dd`,{children:(0,v.jsx)(`code`,{children:e.id})}),(0,v.jsx)(`dt`,{children:`score`}),(0,v.jsx)(`dd`,{children:e.score.toFixed(3)}),e.summary?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(`dt`,{children:`summary`}),(0,v.jsx)(`dd`,{children:e.summary})]}):null]}),(0,v.jsx)(`div`,{className:`vector-memory-panel__hit-actions`,children:(0,v.jsx)(`button`,{type:`button`,className:`vector-memory-panel__forget`,onClick:()=>{F(void 0),j(e)},children:`Forget`})})]}):null]},e.id)}),f.length===0&&E===!1&&o.trim().length>0?(0,v.jsx)(`li`,{className:`vector-memory-panel__no-hits`,children:`No results.`}):null]}),S!==void 0&&S.length>1?(0,v.jsxs)(`div`,{className:`vector-memory-panel__heatmap`,"data-testid":`vector-memory-heatmap`,children:[(0,v.jsx)(`h4`,{children:`Result similarity`}),(0,v.jsx)(`p`,{className:`vector-memory-panel__heatmap-hint`,children:`Pairwise cosine similarity between returned hits. Darker cells = more similar. A bright diagonal with mostly dark off-diagonals means results form a tight cluster; a noisy grid means the search returned mixed topics.`}),(0,v.jsxs)(`div`,{className:`vector-memory-panel__heatmap-grid`,style:{gridTemplateColumns:`auto repeat(${S.length}, minmax(20px, 1fr))`},role:`table`,"aria-label":`Pairwise cosine similarity between returned hits`,children:[(0,v.jsx)(`div`,{className:`vector-memory-panel__heatmap-corner`}),S.map((e,t)=>(0,v.jsx)(`div`,{className:`vector-memory-panel__heatmap-col-label`,children:t+1},`col-${t}`)),S.map((e,t)=>(0,v.jsx)(x,{row:e,index:t},`row-${t}`))]})]}):null,(0,v.jsx)(y,{hit:A,busy:M,error:P,onCancel:()=>j(null),onConfirm:()=>void H(),onOpenChange:e=>{!e&&!M&&j(null)}})]}):(0,v.jsxs)(`div`,{className:`vector-memory-panel vector-memory-panel--disabled`,children:[(0,v.jsx)(`h3`,{children:`Vector Memory`}),(0,v.jsx)(`p`,{children:`Disabled — the webui-server host does not have a vector memory store wired.`})]}):(0,v.jsxs)(`div`,{className:`vector-memory-panel vector-memory-panel--error`,children:[(0,v.jsx)(`h3`,{children:`Vector Memory`}),(0,v.jsxs)(`p`,{children:[`Status unavailable: `,r]})]})}function x({row:e,index:t}){return(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(`div`,{className:`vector-memory-panel__heatmap-row-label`,children:t+1}),e.map((e,n)=>{let r=t===n,i=Math.max(0,Math.min(1,e)),a=95-i*60,o=`hsl(220, ${r?0:35}%, ${a}%)`;return(0,v.jsx)(`div`,{className:r?`vector-memory-panel__heatmap-cell vector-memory-panel__heatmap-cell--diagonal`:`vector-memory-panel__heatmap-cell`,style:{background:o},role:`cell`,"aria-label":`hit ${t+1} vs hit ${n+1}: ${i.toFixed(2)}`,title:`hit ${t+1} ↔ hit ${n+1}: ${i.toFixed(3)}`,children:i>=.5?i.toFixed(2):``},`cell-${t}-${n}`)})]})}export{b as VectorMemoryPanel};
|