Files
apes-sidebar/src/client/locales-sv.ts
T
Menghuan1918 7f634866bf feat(editor): Markdown 预览内嵌 HTML 安全渲染 + 目录大纲(TOC)
宿主 MarkdownText 出于聊天安全把 raw HTML 按字面文本渲染,预览 GitHub
风格 README(徽章墙 div、details 折叠块内嵌 markdown、表格单元格内联
标签、video/picture)时全是源码文本。本次在不动渲染器的前提下:

- markdown-html.ts(纯函数):fence 感知切分器把文档切成 markdown/html
  段(CommonMark type-6 块级标签名单 + 注释段 + 空行终止);段内标签
  tokenizer 归约 open/close/html parts;全文档引用定义收集(每段追加
  保持 [text][id] 跨段语义)
- MarkdownHtml.tsx:DOMPurify 白名单消毒(显式禁 script/iframe/form
  等;a 强制 _blank+noopener;本地媒体 src 经 /sidebar/file 重写);
  MarkdownDocument 帧栈状态机让 <details> 跨段嵌套内部 markdown;
  MarkdownSegment 内联替换(MutationObserver 幂等 pass,把表格单元格
  等处标签文本消毒还原为元素,纯散文不误伤)
- md-toc.tsx:零高度 sticky 浮动目录按钮(≥3 标题)+ 弹出大纲,跳转
  平滑滚动 + 自动展开折叠 details + 高亮闪现。关键修复:子组件读父
  ref 在 React layout 阶段恒为 null(子先于父),改为经自身 bar ref
  的 parentElement 定位容器(jsdom 单测传预填 ref 掩盖了该 bug,仅
  真实挂载 e2e 抓到)
- 纯 markdown 文档走原单次解析路径零变化(现有 mermaid e2e 守卫一字
  不动);新增 readme-style.md 种子 + 探针(消毒渲染/嵌套/内联/TOC
  全链路);19 语言词典新增 toc 键;dompurify 提升为直接依赖(与
  mermaid 传递依赖去重单版本)

设计文档 docs/plans/2026-08-24-markdown-html-toc-design.md
2026-08-24 12:05:14 +08:00

334 lines
21 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
export const sv: Record<string, string> = {
files: 'Filer',
explorer: 'Utforskare',
git: 'Källkodshantering',
terminal: 'Terminal',
editor: 'Editor',
editorExplorer: 'Filers öppningsbeteende',
editorExplorerDesc: 'Styr hur filer öppnas',
editorExplorerMerged: 'Sammanslagen',
editorExplorerMergedDesc: 'Filer växlas på plats i samma fönster; nya fönster startar med trädet öppet',
editorExplorerSplit: 'Separat',
editorExplorerSplitDesc: 'Fönster utan sökväg är den fristående utforskaren (endast träd); varje fil öppnar ett eget fönster (träd dockat, stängt som standard)',
editorTreeToggle: 'Filträdspanel',
editorPathPlaceholder: 'Filsökväg (relativ sessionskatalogen eller absolut), Enter för att öppna',
editorSearchPlaceholder: 'Sök filer efter namn…',
editorSearchNoResults: 'Inga matchande filer',
editorSearchTruncated: 'För många resultat — visar en delvis lista',
editorEmptyHint: 'Välj en fil från trädpanelen eller sökvägsinmatningen ovan för att börja förhandsgranska',
openFileNewTab: 'Öppna i ny flik',
openFileSide: 'Öppna vid sidan',
openWithMenu: 'Öppna med',
openWithSshSuffix: ' (SSH)',
pinOpenWith: 'Fäst i meny',
unpinOpenWith: 'Lossa',
openWithExplorer: 'Filhanterare',
openWithVscode: 'VS Code',
openWithCursor: 'Cursor',
openWithZed: 'Zed',
openWithSettingsSshTitle: 'SSH-fjärrvärd',
openWithSettingsSshDesc: 'Tomt = lokal arbetsyta; med user@host eller SSH-alias byter VSCode-familjens öppnare till vscode-remote/ssh-remote-protokollet och Filhanterare / Zed / icke-VSCode-familjens anpassade editorer döljs från menyn',
openWithSettingsSshPlaceholder: 'user@host eller SSH-alias',
openWithSettingsCustomTitle: 'Anpassade editorer',
openWithSettingsCustomDesc: 'Namn + URL-mall ({path}-platshållare) + VSCode-familj-flagga; i fjärrläge kan endast VSCode-familjens editorer öppna en fjärrsökväg',
openWithSettingsAdd: 'Lägg till',
openWithSettingsName: 'Namn',
openWithSettingsTemplate: 't.ex. cursor://file/{path}',
openWithSettingsFamily: 'VSCode-familj',
openWithSettingsFamilyDesc: 'Denna editor talar VSCode:s URL-dialekt (stöder SSH-fjärröppning)',
openWithSettingsRemove: 'Ta bort',
openWithSettingsInvalidHint: 'Editorer med saknat namn eller en mall utan {path} / scheme:// visas inte i menyn',
newTab: 'Ny flik',
openExplorer: 'Utforskare',
brokenSymlink: 'Bruten symbolisk länk',
openGit: 'Git-panel',
newTerminal: 'Ny terminal',
terminalLimit: 'Terminalgräns nådd (3)',
close: 'Stäng',
closeOtherTabs: 'Stäng andra flikar',
closeLeftTabs: 'Stäng flikar till vänster',
closeRightTabs: 'Stäng flikar till höger',
moveToFreeWindow: 'Flytta till fritt fönster',
floatDropHint: 'Släpp för att öppna i ett fritt fönster',
dockToSidebar: 'Tillbaka till sidopanelen',
collapse: 'Komprimera sidopanel',
expand: 'Expandera sidopanel',
collapseBottomPanel: 'Komprimera bottenpanel',
expandBottomPanel: 'Expandera bottenpanel',
terminalError: 'Terminalanslutning misslyckades',
terminalConnectFailed: 'Terminal misslyckades att ansluta upprepade gånger',
terminalRetry: 'Försök igen',
terminalDepsFailed: 'Terminalberoendet node-pty kunde inte laddas',
terminalDepsHint: 'Kör kommandot nedan i en terminal eller cmd på DSH-maskinen för att reparera det, försök sedan igen (node-pty hålls synkad med DSH-kärnversionen):',
terminalDepsProfile: ' (upptäckt profil: {profile})',
preview: 'Förhandsgranska',
toc: 'Innehållsförteckning',
edit: 'Redigera',
mermaidError: 'Mermaid-rendering misslyckades',
mermaidZoomIn: 'Zooma in',
mermaidZoomOut: 'Zooma ut',
mermaidZoomReset: 'Återställ',
mermaidZoomHint: 'Rulla för att zooma · dra för att panorera · Esc för att stänga',
refresh: 'Uppdatera',
save: 'Spara',
saved: 'Sparad',
unsaved: 'Osparad',
saveFailed: 'Kunde inte spara',
truncation: 'Filen är för stor — visar de första 512KB',
binary: 'Binärfil, förhandsgranskning otillgänglig',
loading: 'Laddar…',
error: 'Kunde inte ladda',
retry: 'Försök igen',
splitLeft: 'Dela vänster',
splitRight: 'Dela höger',
splitUp: 'Dela upp',
splitDown: 'Dela ner',
notRepo: 'Denna katalog är inte ett Git-arkiv',
noChanges: 'Inga ändringar',
stage: 'Köa',
unstage: 'Avköa',
stageAll: 'Köa alla',
unstageAll: 'Avköa alla',
commitPlaceholder: 'Commit-meddelande (Ctrl+Enter)',
commit: 'Commit',
commitError: 'Commit misslyckades',
branch: 'Gren',
worktree: 'Arbetsträd',
checkoutError: 'Grenbyte misslyckades',
history: 'Historik',
changes: 'Ändringar',
staged: 'Köade',
unstaged: 'Avköade',
cancel: 'Avbryt',
diffEmpty: 'Inga textändringar',
diffLoadError: 'Kunde inte ladda diff',
diffBinary: 'Binär',
diffAdded: 'Tillagd',
diffDeleted: 'Borttagen',
diffRenamed: 'Omdöpt',
diffExpand: 'Expandera {count} fler rader',
diffCollapse: 'Komprimera',
discard: 'Förkasta ändringar',
discardTitle: 'Förkasta ändringar',
discardDesc: 'Detta förkastar arbetskopians ändringar av ”{path}” (kan inte ångras).',
viewCommitDiff: 'Visa commit-diff',
copyShortHash: 'Kopiera kort hash',
copyFullHash: 'Kopiera full hash',
copySubject: 'Kopiera ämne',
revertCommit: 'Återställ commit',
revertTitle: 'Återställ commit',
revertDesc: 'Skapa en ny commit på aktuell gren som återställer ”{subject}”.',
cherryPickCommit: 'Cherry-picka commit',
cherryPickTitle: 'Cherry-picka commit',
cherryPickDesc: 'Tillämpa ändringarna från ”{subject}” på aktuell gren.',
timeJustNow: 'just nu',
timeMinutesAgo: '{n} min sedan',
timeHoursAgo: '{n} h sedan',
timeYesterday: 'igår',
loadMore: 'Ladda fler',
historyLoadError: 'Kunde inte ladda mer historik',
produced: 'Producerat',
producedOpen: 'Öppna i sidopanelen',
disconnected: 'Terminalen frånkopplad, ansluter igen…',
exited: 'Terminalprocess avslutad',
noSession: 'Välj en konversation för att använda sidopanelen',
pluginNotLoaded: 'Plugin inte laddad; flik otillgänglig:',
hiddenFiles: 'Dolda filer',
parent: 'Överordnad katalog',
copied: 'Kopierades',
copy: 'Kopiera',
newFile: 'Ny fil',
openEditor: 'Öppna editor',
gitDetail: 'Visa ändringsdetaljer',
referenceFile: '@fil',
addToConversation: 'Lägg till i konversation',
copyRelative: 'Kopiera relativ sökväg',
copyAbsolute: 'Kopiera absolut sökväg',
download: 'Ladda ner',
uploadFiles: 'Ladda upp filer',
uploadFolder: 'Ladda upp mapp',
uploadHere: 'Ladda upp hit',
uploadDropHint: 'Släpp filer/mappar här för att ladda upp',
uploadDropChat: 'Släpp på chatareat för att lägga till bilder',
uploadTo: 'Ladda upp till {dir}',
uploadingTo: 'Laddar upp till {dir}…',
uploadProgress: 'Laddar upp {done}/{total}: {name}',
uploadDone: 'Laddade upp {count} fil(er)',
uploadFailed: 'Uppladdning misslyckades: {error}',
uploadFailedUnknown: 'Okänt fel',
uploadTooLarge: 'Filen för stor (över uppladdningsgränsen)',
uploadCancelled: 'Uppladdning avbruten',
settingsNav: 'Sidokort',
settingsIntro: 'Hantera vad sidokortet visar och hur det beter sig',
settingsPopupDesc: 'Konfigurera relaterade alternativ för {feature}',
settingsDone: 'Klar',
settingsOpenTitle: 'Öppna som standard för nya konversationer',
settingsOpenDesc: 'Expandera sidokortet automatiskt för helt nya konversationer; befintliga konversationer behåller sina egna layouter',
settingsWidthTitle: 'Standardbreddandel',
settingsWidthDesc: 'Sidokortets standardandel av fönsterbredden för nya konversationer (20–60)',
settingsWidthSuffix: '%',
settingsOpenPathTitle: 'Öppna chattfiler i sidopanelen',
settingsOpenPathDesc: 'Öppna fillänkar i chatten (verktygsrader, producerade filer, omnämnanden) i sidopanelens editor i stället för systemets standardapp',
settingsTitleBarTitle: 'Positions kompatibilitetsläge',
settingsTitleBarDesc: 'Välj titelfälts kompatibilitetsschema: auto-detektera (standard, konservativt) / DSH officiella webb / kända skrivbordsskal / anpassat (förskjutningsavstånd + egen CSS)',
settingsTitleBarStripTitle: 'Förskjutningsavstånd',
settingsTitleBarStripDesc: 'Titelfältsremsans höjd: hur långt sidopanelens knappar och innehåll flyttas ner i px (0–120, standard 40; gäller under det anpassade schemat)',
settingsSchemeAutoTitle: 'Auto-detektera',
settingsSchemeAutoDesc: 'Konservativt: endast standard Window Controls Overlay API bidrar (reell caption-overlay-höjd); vanliga webbmiljöer får ingen ändring',
settingsSchemeWebTitle: 'DSH officiella webb',
settingsSchemeWebDesc: 'Explicit deklarera det officiella webbgränssnittet: ingen anpassning alls (inte ens standard WCO-geometri)',
settingsSchemeCustomTitle: 'Anpassat',
settingsSchemeCustomDesc: 'Full kontroll: injicera egen CSS (kan åsidosätta inbyggda stilar) och sätt titelfältets förskjutningsavstånd',
settingsSchemeDetectedSuffix: 'upptäckt',
settingsCustomCssTitle: 'Anpassad CSS',
settingsCustomCssDesc: 'Stilar tillagda på slutet av sidan (senare i kaskaden vinner vid oavgjort; använd !important för att åsidosätta JS-skrivna inline-variabler)',
settingsCustomCssPlaceholder: '/* t.ex. reservera 36px för ett skal med egenritat titelfält */\nhtml[data-dsh-title-bar-height="36"] {\n --dsh-title-bar-strip: 36px !important;\n}',
settingsSaveFailed: 'Kunde inte spara',
settingsConflict: 'Inställningen ändrades i ett annat fönster — vänligen försök igen',
binaryNoPreview: 'Denna filtyp kan inte förhandsgranskas',
downloadToView: 'Ladda ner för att visa',
settingsSubagentTitle: 'Öppna automatiskt Uppgiftssidan när en subagent dyker upp',
settingsSubagentDesc: 'Expandera sidokortet och öppna Uppgiftssidan när aktuell konversation skapar en ny subagent; stäng av för att öppna manuellt',
settingsJobsTitle: 'Öppna automatiskt Jobbsidan vid nytt bakgrundsjobb',
settingsJobsDesc: 'Expandera sidokortet och öppna Jobbsidan när ett nytt bakgrundsjobb dyker upp för aktuell konversation (varje nytt jobb utlöser); stäng av för att öppna manuellt',
settingsToolsTitle: 'Injicera terminalverktyg för modellen',
settingsToolsDesc: 'När aktiverat kan modellen skapa och styra sidopanelsterminaler via de 8 terminal_*-verktygen (av som standard)',
settingsBottomTerminalTitle: 'Öppna automatiskt en terminal vid bottenpanelens första expandering',
settingsBottomTerminalDesc: 'När bottenpanelen expanderas för första gången i en session, försök öppna en ny terminalflik där (terminalgränsen gäller fortfarande; på som standard)',
settingsFontFamilyTitle: 'Terminalens teckensnittsfamilj',
settingsFontFamilyDesc: 'Anpassad teckensnittsfamilj för terminalen (en CSS font-family-stack som "JetBrains Mono", monospace; lämna tomt för att följa temats monospaced-teckensnitt)',
settingsFontFamilyPlaceholder: '"JetBrains Mono", monospace',
settingsFontSizeTitle: 'Terminalens teckenstorlek',
settingsFontSizeDesc: 'Terminalens teckenstorlek i px (9–32, standard 13)',
settingsFontSizeSuffix: 'px',
settingsShellTitle: 'Skalsökväg',
settingsShellDesc: 'Skal som startas för UI- och modellterminaler (absolut sökväg ellerbart körbart namn). Tomt behåller den äldre ordningen: yaml config.shell → $SHELL / inloggningsskal / Windows powershell.exe. Gäller terminaler som öppnas senare',
settingsShellPlaceholder: 't.ex. /bin/zsh (tomt = auto)',
settingsShellArgsTitle: 'Skalargument',
settingsShellArgsDesc: 'Uttryckliga skalargument, mellanslagsseparerade; när icke-tomma ersätter de helt standardvärdena (samma kontrakt som yaml shellArgs)',
settingsShellArgsPlaceholder: 't.ex. -l (tomt = standard)',
settingsTabsTitle: 'Sidopanelens innehåll',
settingsViewersTitle: 'Filvisare',
settingsGeneralTitle: 'Allmänt',
settingsPopup: 'Funktionsinställningar',
settingsViewerCatchAll: 'Fånga alla: alla filer',
viewerImage: 'Bild',
viewerPdf: 'PDF',
viewerMarkdown: 'Markdown',
viewerCode: 'Kod',
viewerBinary: 'Binär nedladdning',
viewerHtml: 'HTML',
browser: 'Webbläsare',
browserPlaceholder: 'Ange en URL, t.ex. example.com',
browserGo: 'Gå',
browserBack: 'Bakåt',
browserForward: 'Framåt',
browserStart: 'Ange en URL för att börja surfa (sandlådeläge)',
browserBlockedScheme: 'Blockerat: endast http/https-URL:er är tillåtna',
browserBlockedLoopback: 'Blockerat: lokala och interna adresser kan inte surfas här',
browserInvalid: 'Ogiltig URL',
browserNoSandboxWarning: 'Sandlåda av: den aktuella sidan kör med fullständiga GUI-privilegier (återaktivera i inställningarna)',
htmlNoSandboxWarning: 'Sandlåda av: denna HTML kör med fullständiga GUI-privilegier (återaktivera i inställningarna)',
sandboxStatusOn: 'Sandlådeläge: på · sidor kan inte komma åt GUI:ts data eller lokala filer; inloggningar och tredjepartscookies kanske inte fungerar',
sandboxUnlock: 'Avaktivera tillfälligt (osäkert)',
sandboxRestore: 'Återställ sandlåda',
settingsHtmlDefaultUnsafeTitle: 'Öppna HTML-förhandsgranskningar osandlådade som standard (osäkert)',
settingsHtmlDefaultUnsafeDesc: 'När på, startar varje nyöppnad HTML-förhandsgranskning i osandlådat tillstånd (samma ursprung som GUI — kan läsa sessionsfiler och interna API:er); statusraden erbjuder fortfarande en återställning med ett klick',
settingsHtmlSandboxTitle: 'Avaktivera sandlåda för HTML-förhandsgranskning (osäkert)',
settingsHtmlSandboxDesc: 'Med sandlådan av körs förhandsgranskad HTML med samma ursprung som GUI: kan läsa sessionsfiler, lokal lagring och anropa interna API:er. Aktivera endast för fullt betrodda filer',
settingsBrowserSandboxTitle: 'Avaktivera webbläsarsandlåda (osäkert)',
settingsBrowserSandboxDesc: 'Med sandlådan av körs alla besökta sajter med samma ursprung som GUI: kan läsa sessionsdata och agera som er inloggade session. Aktivera endast för fullt betrodda sajter',
settingsBrowserLinksTitle: 'Öppna chattens externa länkar i sidopanelen',
settingsBrowserLinksDesc: 'När på, klick på en extern länk i chatten eller GUI öppnar sidopanelen i stället för ett nytt fönster; HTTP och HTTPS styrs separat av knapparna nedan; Ctrl/Cmd+klick kringgår alltid',
settingsBrowserHttpTitle: 'Öppna HTTP-sidor i sidopanelen',
settingsBrowserHttpDesc: 'När på, klick på en extern HTTP-länk i chatten eller GUI öppnar sidopanelen (pluginsidor som deklarerar urlTarget vinner); Ctrl/Cmd+klick kringgår alltid',
settingsBrowserHttpsTitle: 'Öppna HTTPS-sidor i sidopanelen',
settingsBrowserHttpsDesc: 'När på, klick på en extern HTTPS-länk i chatten eller GUI öppnar sidopanelen. Av som standard: de flesta HTTPS-sajter vägrar bli inbäddade, så systemwebbläsaren är det smidigare standardvalet',
browserOpenExternal: 'Öppna i webbläsare',
browserEmbedBlocked: '{host} vägrade bli inbäddad',
browserEmbedBlockedDesc: 'Sajten förbjuder att visas inuti andra sidor (X-Frame-Options / frame-ancestors), så den kan inte ladda i sidopanelen. Öppna den direkt i er webbläsare i stället.',
browserEmbedAnyway: 'Ladda ändå',
subagent: 'Uppgifter',
openSubagent: 'Uppgifter',
subagentMainAgent: 'Huvudagent',
subagentEmpty: 'Inga subagenter',
subagentEmptyDesc: 'Subagenter skapade under huvudagenten visas här',
subagentRunning: 'Kör',
subagentInactive: 'Inaktiv',
subagentModeOneShot: 'Engångs',
subagentModeContinuable: 'Fortsättbar',
subagentCount: '{count} subagenter',
subagentCountRunning: '{count} subagenter · {running} kör',
subagentDiagCorrupt: 'Korrupt',
subagentDiagUnsupported: 'Stöds ej',
subagentDiagUnavailable: 'Otillgänglig',
subagentThinking: 'Tänker…',
sideChat: 'Sidochatt (beta)',
sideChatNew: 'Ny tråd',
sideChatUntitled: 'Ny tråd',
sideChatEmpty: 'Inga sidokonversationer',
sideChatEmptyDesc: 'Varje sidokonversation är en egen flik i flikraden — den ärver den aktuella sessionens kontext och kommer aldrig in i huvudkonversationen',
sideChatCreating: 'Skapar sidokonversation…',
sideChatRetry: 'Försök igen',
sideChatThreads: 'Byt tråd / ny',
sideChatSave: 'Spara som ny session',
sideChatSaveTitle: 'Höj denna tråd till en toppnivå-session i huvudsessionslistan',
sideChatSaved: 'Sparad som ny session',
sideChatNoTurn: 'Spara är tillgängligt efter den första slutförda vändan',
sideChatPendingDrop: 'Den senaste obesvarade följdfrågan inkluderas inte i den sparade sessionen',
sideChatFirstPlaceholder: 'Ställ den första frågan — kontext ärvd…',
sideChatComposerPlaceholder: 'Ställ en följdfråga…',
sideChatThinking: 'Dyk djupare…',
sideChatThink: 'Tänker',
sideChatInjection: 'Kontext injicerad',
sideChatSend: 'Skicka',
sideChatCancel: 'Stoppa',
sideChatCancelTitle: 'Avbryt den pågående vändan (köat arbete behålls)',
sideChatClose: 'Stäng tråd',
sideChatCloseTitle: 'Frigör trådens agent (historik behålls)',
sideChatError: 'Sidochattsfel: {message}',
jobs: 'Bakgrundsjobb',
jobsCount: '{count} bakgrundsjobb',
jobsCountRunning: '{count} bakgrundsjobb · {running} kör',
jobStatusRunning: 'Kör',
jobStatusStopping: 'Stoppar',
jobStatusCompleted: 'Klar',
jobStatusKilled: 'Dödad',
jobStatusFailed: 'Misslyckades',
jobDurationSeconds: '{seconds}s',
jobDurationMinutes: '{minutes}m {seconds}s',
jobDurationHours: '{hours}t {minutes}m',
jobViewOutput: 'Visa utdata',
jobHideOutput: 'Dölj utdata',
jobNoOutput: 'Ingen utdata än',
jobNotReadYet: 'Väntar på att modellen ska läsa detta jobb; dess utdata visas här när modellen kör job_output',
jobOutputTruncated: 'Utdata avkortad',
jobOutputError: 'Kunde inte läsa utdata',
jobKill: 'Döda',
jobKillConfirm: 'Klicka igen för att bekräfta dödande',
jobKillError: 'Kunde inte döda',
addPluginsTabCard: 'Lägg till flik-plugins',
addPluginsTabCardDesc: 'Registrera en ny sidopanelssida',
addPluginsViewerCard: 'Lägg till förhandsgransknings-plugins',
addPluginsViewerCardDesc: 'Registrera en filtypsförhandsgranskning',
addPluginsTabDesc: 'Sidopanelens sidor (flikar) kan utökas av plugins. Plugins registreras via ctx.betterSidebar-tjänsten; att klicka på Installera kopierar installationskommandot — klistra in det i en terminal där er DSH-profil lever och kör det.',
addPluginsViewerDesc: 'Filförhandsgranskare kan utökas av plugins. Plugins registreras via ctx.betterSidebar-tjänsten; att klicka på Installera kopierar installationskommandot — klistra in det i en terminal där er DSH-profil lever och kör det.',
addPluginsBrowseMore: 'Bläddra bland fler plugins på GitHub (topic: dsh-better-sidebar)',
addPluginsSearch: 'Sök på plugin-namn eller beskrivning…',
addPluginsNoMatch: 'Inga plugins matchar',
addPluginsRecommended: 'Rekommenderade plugins',
addPluginsEmpty: 'Inga plugins kurerade ännu — publicera er egen under GitHub-topic:n',
openPlugin: 'Öppna',
copyInstall: 'Kopiera installationskommando',
pluginOfficeDesc: 'Office-svitförhandsgranskning (.docx / .xlsx / .pptx) för better-sidebar-editorn, som håller de tunga Office-renderingsbiblioteken utanför kärnbundlen',
pluginFlowglassDesc: 'Live sessionsflödesgraf med tre banor för användare, assistent och verktygsanrop, plus parallella grupper, subagent-grenar, djupdykning och live-status; registrerar en inbyggd Flowglass-flik när better-sidebar är installerat och behåller sin fristående låda som reserv',
pluginGitForgeDesc: 'Git Forge-flik: GitHub/Gitea (och andra forge) kontobibliotek + per-projekt-tillstånd + hård push-policy; token stannar i lokala secrets (aldrig i modellkontext); skrivskyddat GitForge-verktyg och agent-HTTPS credential helper',
pluginGitRemotesDesc: 'Git Remotes-flik: gren/upstream/ahead-behind, fetch (valbar prune), ff-only pull och push endast efter bekräftelse i fliken. Ersätter inte den inbyggda Git-köa/commit-fliken, och erbjuder inte force-push eller ett model-auto-push-verktyg',
pluginSentinelDesc: 'Villkorsdriven agentväckning: fil-/process-/port-/http-/kommando-/webhook-sensorer väcker vilande sessioner när villkor utlöses; registrerar en "Sentinel"-flik med serverns globala bevakningstabell',
pluginSidebarQaDesc: 'Markera-och-fråga: Markera konversationstext → fråga i högra panelen → en dedikerad följdfrågesession (❓ följdfråga) i samma arbetsyta; en snabb no-thinking-modell komprimerar huvudkontexten och injicerar den tillsammans med citatet, utan att avbryta huvudkonversationen. Följdfrågor kan nästlas, fortsättas och arkiveras',
pluginSshTunnelDesc: 'SSH Tunnel-flik: flervärd-inventering + per-projekt-tillstånd + lokala secrets; SSHManager-verktyg (exec/SFTP/sessionsstrategier); central interaktiv terminal och dubbelpanelig SFTP',
pluginTurnReviewDesc: 'En mänsklig grinds för den just avslutade vändan: Godkänn / Begär ändringar per sökväg med valfri kommentar; sökvägar grupperade per huvudsession / subagent / oattribuerade; inline ögonblicksbild-mot-nu-diff innan ni bestämmer er. Ingen förgrening, ingen /rewind',
pluginVideoPreviewDesc: 'Inline videoförhandsgranskning (.mp4/.webm/.mov/.mkv/.avi etc.) för better-sidebar-editorn, backad av en dedikerad /video-värdroute med HTTP Range (206)-stöd — sökning fungerar och filer begränsas inte av 20MB mediaLimit',
pluginDocsPanelDesc: 'Globala dokument i DSH-sidopanelen: läs era egna Markdown-anteckningar från valfri arbetsyta — en fillista, en översikt, öppna i Chrome / VS Code och kopieringsknappar; dokumentkatalogen är konfigurerbar (standard ~/.dsh/docs)',
}