@chatcode/cco-better-sidebar 0.18.0-alpha.0
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/LICENSE +21 -0
- package/README.md +554 -0
- package/README_EN.md +563 -0
- package/assets/logo.svg +1 -0
- package/cordis.patch.yml +79 -0
- package/lib/client-editor.js +55744 -0
- package/lib/client-mermaid.js +208256 -0
- package/lib/client-registry.js +30378 -0
- package/lib/client-terminal.js +16894 -0
- package/lib/client.js +30378 -0
- package/lib/index.js +6897 -0
- package/lib/invariant.js +22 -0
- package/lib/types/agent-opens.d.ts +65 -0
- package/lib/types/agent-pty.d.ts +226 -0
- package/lib/types/browser-probe.d.ts +15 -0
- package/lib/types/bundle-route.d.ts +12 -0
- package/lib/types/chatcode-update.d.ts +47 -0
- package/lib/types/client/AccountMenu.d.ts +1 -0
- package/lib/types/client/AiRatioSection.d.ts +3 -0
- package/lib/types/client/BrowserView.d.ts +39 -0
- package/lib/types/client/ChatcodeGate.d.ts +6 -0
- package/lib/types/client/CodingPlanModelsSettings.d.ts +9 -0
- package/lib/types/client/DiffTab.d.ts +6 -0
- package/lib/types/client/DiffView.d.ts +51 -0
- package/lib/types/client/EditorHost.d.ts +13 -0
- package/lib/types/client/FenceErrorNotice.d.ts +5 -0
- package/lib/types/client/FileTree.d.ts +41 -0
- package/lib/types/client/FreeWindow.d.ts +29 -0
- package/lib/types/client/GitView.d.ts +12 -0
- package/lib/types/client/MarkdownHtml.d.ts +32 -0
- package/lib/types/client/OrphanedTab.d.ts +11 -0
- package/lib/types/client/PdfView.d.ts +6 -0
- package/lib/types/client/ReleaseNotesDialog.d.ts +11 -0
- package/lib/types/client/RenderBoundary.d.ts +32 -0
- package/lib/types/client/SandboxStatusBar.d.ts +10 -0
- package/lib/types/client/SideCardSection.d.ts +74 -0
- package/lib/types/client/Sidebar.d.ts +8 -0
- package/lib/types/client/TabBar.d.ts +54 -0
- package/lib/types/client/TerminalView.d.ts +24 -0
- package/lib/types/client/TextEditor.d.ts +10 -0
- package/lib/types/client/TreePanel.d.ts +27 -0
- package/lib/types/client/UpdateDialog.d.ts +10 -0
- package/lib/types/client/UpdateSettingsPanel.d.ts +1 -0
- package/lib/types/client/UpdateSettingsSection.d.ts +10 -0
- package/lib/types/client/UploadOverlay.d.ts +20 -0
- package/lib/types/client/UsageHeatmapSection.d.ts +4 -0
- package/lib/types/client/add-plugin-modal.d.ts +15 -0
- package/lib/types/client/api.d.ts +345 -0
- package/lib/types/client/binary-download.d.ts +12 -0
- package/lib/types/client/breakpoints.d.ts +17 -0
- package/lib/types/client/browser.d.ts +60 -0
- package/lib/types/client/builtins/index.d.ts +18 -0
- package/lib/types/client/builtins/tabs.d.ts +11 -0
- package/lib/types/client/builtins/viewers.d.ts +3 -0
- package/lib/types/client/chat-presentation.d.ts +13 -0
- package/lib/types/client/chunk-loader.d.ts +124 -0
- package/lib/types/client/chunks/editor.d.ts +9 -0
- package/lib/types/client/chunks/mermaid.d.ts +10 -0
- package/lib/types/client/chunks/terminal.d.ts +9 -0
- package/lib/types/client/cm-themes.d.ts +24 -0
- package/lib/types/client/conversation-draft.d.ts +14 -0
- package/lib/types/client/desktop-env.d.ts +35 -0
- package/lib/types/client/editor-load.d.ts +66 -0
- package/lib/types/client/frame-batcher.d.ts +24 -0
- package/lib/types/client/icons.d.ts +66 -0
- package/lib/types/client/image-types.d.ts +3 -0
- package/lib/types/client/ime-guard.d.ts +36 -0
- package/lib/types/client/index.d.ts +19 -0
- package/lib/types/client/intercept.d.ts +44 -0
- package/lib/types/client/lang.d.ts +14 -0
- package/lib/types/client/layout-push.d.ts +15 -0
- package/lib/types/client/lazy-chunk.d.ts +25 -0
- package/lib/types/client/link-intercept.d.ts +42 -0
- package/lib/types/client/locales-ar.d.ts +18 -0
- package/lib/types/client/locales-de.d.ts +4 -0
- package/lib/types/client/locales-fr.d.ts +10 -0
- package/lib/types/client/locales-hi.d.ts +17 -0
- package/lib/types/client/locales-id.d.ts +15 -0
- package/lib/types/client/locales-it.d.ts +8 -0
- package/lib/types/client/locales-ja.d.ts +17 -0
- package/lib/types/client/locales-ko.d.ts +9 -0
- package/lib/types/client/locales-nl.d.ts +16 -0
- package/lib/types/client/locales-pl.d.ts +19 -0
- package/lib/types/client/locales-pt.d.ts +1 -0
- package/lib/types/client/locales-ru.d.ts +13 -0
- package/lib/types/client/locales-sv.d.ts +1 -0
- package/lib/types/client/locales-th.d.ts +17 -0
- package/lib/types/client/locales-tr.d.ts +17 -0
- package/lib/types/client/locales-vi.d.ts +17 -0
- package/lib/types/client/locales-zh-HK.d.ts +32 -0
- package/lib/types/client/locales-zh-MO.d.ts +32 -0
- package/lib/types/client/locales-zh-TW.d.ts +32 -0
- package/lib/types/client/locales.d.ts +571 -0
- package/lib/types/client/markdown-html.d.ts +96 -0
- package/lib/types/client/markdown-images.d.ts +45 -0
- package/lib/types/client/markdown-labels.d.ts +21 -0
- package/lib/types/client/md-toc.d.ts +4 -0
- package/lib/types/client/mermaid-blocks.d.ts +47 -0
- package/lib/types/client/mermaid-sanitize.d.ts +2 -0
- package/lib/types/client/mermaid.d.ts +12 -0
- package/lib/types/client/open-when-sized.d.ts +20 -0
- package/lib/types/client/open-with-settings.d.ts +4 -0
- package/lib/types/client/open-with.d.ts +87 -0
- package/lib/types/client/openpath-intercept.d.ts +52 -0
- package/lib/types/client/paths.d.ts +43 -0
- package/lib/types/client/pdf-types.d.ts +2 -0
- package/lib/types/client/pinned.d.ts +86 -0
- package/lib/types/client/plugin-settings.d.ts +8 -0
- package/lib/types/client/plugins-shared.d.ts +27 -0
- package/lib/types/client/plugins-tabs.d.ts +3 -0
- package/lib/types/client/plugins-viewers.d.ts +3 -0
- package/lib/types/client/prefs.d.ts +41 -0
- package/lib/types/client/produced-files.d.ts +29 -0
- package/lib/types/client/selection-payload.d.ts +27 -0
- package/lib/types/client/service.d.ts +445 -0
- package/lib/types/client/session-pins.d.ts +14 -0
- package/lib/types/client/settings-nav-icon.d.ts +27 -0
- package/lib/types/client/shell-presets.d.ts +48 -0
- package/lib/types/client/split-pane.d.ts +38 -0
- package/lib/types/client/state.d.ts +480 -0
- package/lib/types/client/tab-content-memo.d.ts +40 -0
- package/lib/types/client/terminal-font.d.ts +78 -0
- package/lib/types/client/terminal-links.d.ts +119 -0
- package/lib/types/client/theme.d.ts +45 -0
- package/lib/types/client/titlebar-strip.d.ts +23 -0
- package/lib/types/client/ui-tweaks/appicons.d.ts +16 -0
- package/lib/types/client/ui-tweaks/archive.d.ts +42 -0
- package/lib/types/client/ui-tweaks/branding.d.ts +45 -0
- package/lib/types/client/ui-tweaks/cachehit.d.ts +41 -0
- package/lib/types/client/ui-tweaks/gitbar.d.ts +103 -0
- package/lib/types/client/ui-tweaks/index.d.ts +279 -0
- package/lib/types/client/ui-tweaks/mcp.d.ts +28 -0
- package/lib/types/client/ui-tweaks/notifier.d.ts +125 -0
- package/lib/types/client/ui-tweaks/whale.d.ts +55 -0
- package/lib/types/client/upload.d.ts +69 -0
- package/lib/types/client/useChatcodeAccount.d.ts +10 -0
- package/lib/types/client/wco.d.ts +47 -0
- package/lib/types/codingplan.d.ts +37 -0
- package/lib/types/config.d.ts +95 -0
- package/lib/types/context-types.d.ts +540 -0
- package/lib/types/fs-operations.d.ts +30 -0
- package/lib/types/fs-search.d.ts +24 -0
- package/lib/types/fs-tree.d.ts +51 -0
- package/lib/types/git.d.ts +124 -0
- package/lib/types/html-route.d.ts +59 -0
- package/lib/types/index.d.ts +47 -0
- package/lib/types/invariant.d.ts +15 -0
- package/lib/types/login-route.d.ts +2 -0
- package/lib/types/open-external.d.ts +24 -0
- package/lib/types/path-security.d.ts +26 -0
- package/lib/types/prefs-shared.d.ts +257 -0
- package/lib/types/pty-deps.d.ts +79 -0
- package/lib/types/pty-manager.d.ts +168 -0
- package/lib/types/tools.d.ts +34 -0
- package/lib/types/trust-fence.d.ts +24 -0
- package/lib/types/ui-tweaks/archive.d.ts +71 -0
- package/lib/types/ui-tweaks/config.d.ts +186 -0
- package/lib/types/ui-tweaks/git-web.d.ts +43 -0
- package/lib/types/ui-tweaks/git.d.ts +311 -0
- package/lib/types/ui-tweaks/index.d.ts +17 -0
- package/lib/types/ui-tweaks/mcp.d.ts +103 -0
- package/lib/types/ui-tweaks/turn-outcome.d.ts +57 -0
- package/lib/types/ui-tweaks/web.d.ts +55 -0
- package/lib/types/wire.d.ts +38 -0
- package/package.json +213 -0
- package/scripts/install.ps1 +310 -0
- package/scripts/install.sh +287 -0
- package/src/agent-opens.ts +265 -0
- package/src/agent-pty.ts +527 -0
- package/src/browser-probe.ts +26 -0
- package/src/bundle-route.ts +129 -0
- package/src/chatcode-update.ts +193 -0
- package/src/client/AccountMenu.tsx +177 -0
- package/src/client/AiRatioSection.module.css +329 -0
- package/src/client/AiRatioSection.tsx +292 -0
- package/src/client/BrowserView.tsx +289 -0
- package/src/client/ChatcodeGate.tsx +35 -0
- package/src/client/CodingPlanModelsSettings.module.css +118 -0
- package/src/client/CodingPlanModelsSettings.tsx +101 -0
- package/src/client/DiffTab.tsx +114 -0
- package/src/client/DiffView.tsx +305 -0
- package/src/client/EditorHost.tsx +563 -0
- package/src/client/FenceErrorNotice.tsx +40 -0
- package/src/client/FileTree.tsx +701 -0
- package/src/client/FreeWindow.tsx +337 -0
- package/src/client/GitView.tsx +722 -0
- package/src/client/MarkdownHtml.tsx +296 -0
- package/src/client/OrphanedTab.tsx +27 -0
- package/src/client/PdfView.tsx +110 -0
- package/src/client/ReleaseNotesDialog.tsx +91 -0
- package/src/client/RenderBoundary.tsx +49 -0
- package/src/client/SandboxStatusBar.tsx +60 -0
- package/src/client/SideCardSection.module.css +932 -0
- package/src/client/SideCardSection.tsx +1169 -0
- package/src/client/Sidebar.tsx +1857 -0
- package/src/client/TabBar.tsx +365 -0
- package/src/client/TerminalView.tsx +424 -0
- package/src/client/TextEditor.tsx +468 -0
- package/src/client/TreePanel.tsx +279 -0
- package/src/client/UpdateDialog.tsx +186 -0
- package/src/client/UpdateSettingsPanel.tsx +29 -0
- package/src/client/UpdateSettingsSection.tsx +22 -0
- package/src/client/UploadOverlay.tsx +62 -0
- package/src/client/UsageHeatmapSection.module.css +440 -0
- package/src/client/UsageHeatmapSection.tsx +301 -0
- package/src/client/add-plugin-modal.tsx +199 -0
- package/src/client/api.ts +433 -0
- package/src/client/binary-download.tsx +23 -0
- package/src/client/breakpoints.ts +61 -0
- package/src/client/browser.ts +167 -0
- package/src/client/builtins/index.ts +37 -0
- package/src/client/builtins/tabs.tsx +275 -0
- package/src/client/builtins/viewers.tsx +125 -0
- package/src/client/chat-presentation.ts +95 -0
- package/src/client/chunk-loader.ts +350 -0
- package/src/client/chunks/editor.tsx +9 -0
- package/src/client/chunks/mermaid.tsx +10 -0
- package/src/client/chunks/terminal.tsx +9 -0
- package/src/client/cm-themes.ts +129 -0
- package/src/client/conversation-draft.ts +29 -0
- package/src/client/css-modules.d.ts +5 -0
- package/src/client/desktop-env.ts +72 -0
- package/src/client/editor-load.ts +92 -0
- package/src/client/frame-batcher.ts +56 -0
- package/src/client/icons.tsx +170 -0
- package/src/client/image-types.ts +8 -0
- package/src/client/ime-guard.ts +47 -0
- package/src/client/index.tsx +501 -0
- package/src/client/intercept.tsx +172 -0
- package/src/client/lang.ts +225 -0
- package/src/client/layout-push.ts +37 -0
- package/src/client/layout.css +156 -0
- package/src/client/lazy-chunk.tsx +89 -0
- package/src/client/link-intercept.ts +73 -0
- package/src/client/locales-ar.ts +387 -0
- package/src/client/locales-de.ts +372 -0
- package/src/client/locales-fr.ts +379 -0
- package/src/client/locales-hi.ts +386 -0
- package/src/client/locales-id.ts +384 -0
- package/src/client/locales-it.ts +377 -0
- package/src/client/locales-ja.ts +486 -0
- package/src/client/locales-ko.ts +378 -0
- package/src/client/locales-nl.ts +384 -0
- package/src/client/locales-pl.ts +388 -0
- package/src/client/locales-pt.ts +369 -0
- package/src/client/locales-ru.ts +384 -0
- package/src/client/locales-sv.ts +369 -0
- package/src/client/locales-th.ts +386 -0
- package/src/client/locales-tr.ts +386 -0
- package/src/client/locales-vi.ts +386 -0
- package/src/client/locales-zh-HK.ts +401 -0
- package/src/client/locales-zh-MO.ts +401 -0
- package/src/client/locales-zh-TW.ts +401 -0
- package/src/client/locales.ts +1229 -0
- package/src/client/markdown-html.ts +331 -0
- package/src/client/markdown-images.ts +137 -0
- package/src/client/markdown-labels.tsx +31 -0
- package/src/client/md-toc.tsx +127 -0
- package/src/client/mermaid-blocks.ts +110 -0
- package/src/client/mermaid-sanitize.ts +93 -0
- package/src/client/mermaid.tsx +406 -0
- package/src/client/open-when-sized.ts +43 -0
- package/src/client/open-with-settings.tsx +135 -0
- package/src/client/open-with.ts +221 -0
- package/src/client/openpath-intercept.ts +79 -0
- package/src/client/paths.ts +63 -0
- package/src/client/pdf-types.ts +4 -0
- package/src/client/pinned.ts +184 -0
- package/src/client/plugin-settings.ts +43 -0
- package/src/client/plugins-shared.ts +29 -0
- package/src/client/plugins-tabs.ts +153 -0
- package/src/client/plugins-viewers.ts +44 -0
- package/src/client/prefs.ts +216 -0
- package/src/client/produced-files.ts +120 -0
- package/src/client/selection-payload.ts +86 -0
- package/src/client/service.ts +873 -0
- package/src/client/session-pins.tsx +334 -0
- package/src/client/settings-nav-icon.ts +55 -0
- package/src/client/shell-presets.ts +83 -0
- package/src/client/sidebar.module.css +3607 -0
- package/src/client/split-pane.tsx +333 -0
- package/src/client/state.ts +1646 -0
- package/src/client/tab-content-memo.ts +55 -0
- package/src/client/terminal-font.ts +224 -0
- package/src/client/terminal-links.ts +194 -0
- package/src/client/theme.ts +110 -0
- package/src/client/titlebar-strip.ts +37 -0
- package/src/client/ui-tweaks/appicons.ts +24 -0
- package/src/client/ui-tweaks/archive.tsx +281 -0
- package/src/client/ui-tweaks/branding.tsx +232 -0
- package/src/client/ui-tweaks/cachehit.tsx +122 -0
- package/src/client/ui-tweaks/gitbar.tsx +2559 -0
- package/src/client/ui-tweaks/index.tsx +1696 -0
- package/src/client/ui-tweaks/mcp.tsx +582 -0
- package/src/client/ui-tweaks/notifier.ts +514 -0
- package/src/client/ui-tweaks/whale.tsx +171 -0
- package/src/client/upload.ts +187 -0
- package/src/client/useChatcodeAccount.ts +103 -0
- package/src/client/wco.ts +120 -0
- package/src/codingplan.ts +146 -0
- package/src/config.ts +207 -0
- package/src/context-types.ts +559 -0
- package/src/fs-operations.ts +97 -0
- package/src/fs-search.ts +113 -0
- package/src/fs-tree.ts +158 -0
- package/src/git.ts +446 -0
- package/src/html-route.ts +106 -0
- package/src/index.ts +1524 -0
- package/src/invariant.ts +32 -0
- package/src/login-route.ts +26 -0
- package/src/open-external.ts +90 -0
- package/src/path-security.ts +81 -0
- package/src/prefs-shared.ts +303 -0
- package/src/pty-deps.ts +241 -0
- package/src/pty-manager.ts +376 -0
- package/src/tools.ts +482 -0
- package/src/trust-fence.ts +84 -0
- package/src/ui-tweaks/archive.ts +293 -0
- package/src/ui-tweaks/config.ts +257 -0
- package/src/ui-tweaks/git-web.ts +421 -0
- package/src/ui-tweaks/git.ts +1524 -0
- package/src/ui-tweaks/index.ts +61 -0
- package/src/ui-tweaks/mcp.ts +535 -0
- package/src/ui-tweaks/turn-outcome.ts +105 -0
- package/src/ui-tweaks/web.ts +225 -0
- package/src/wire.ts +110 -0
- package/vendor/addon-fit.js +2 -0
- package/vendor/xterm.css +218 -0
- package/vendor/xterm.js +5 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import { type AnalyzedMarkdownHtml } from './markdown-html.ts';
|
|
3
|
+
import { type MermaidMarkdownProps } from './mermaid-blocks.ts';
|
|
4
|
+
import type { SessionScope } from './api.ts';
|
|
5
|
+
/** The chunk-resident markdown renderer (mermaid lazy chunk), shared with the
|
|
6
|
+
* legacy no-HTML preview path in TextEditor. */
|
|
7
|
+
export declare const LazyMermaidMarkdown: (props: MermaidMarkdownProps) => ReactNode;
|
|
8
|
+
/** Everything the sanitizers need to resolve local media + scope the route. */
|
|
9
|
+
export interface MarkdownHtmlMedia {
|
|
10
|
+
scope: SessionScope;
|
|
11
|
+
path: string;
|
|
12
|
+
origin: string;
|
|
13
|
+
}
|
|
14
|
+
interface MarkdownDocumentProps {
|
|
15
|
+
info: AnalyzedMarkdownHtml;
|
|
16
|
+
media: MarkdownHtmlMedia;
|
|
17
|
+
codeLabels: {
|
|
18
|
+
copyLabel: string;
|
|
19
|
+
copiedLabel: string;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* The split-document renderer: markdown runs render through MarkdownSegment,
|
|
24
|
+
* HTML runs render as sanitized leaves, and unclosed block elements lower the
|
|
25
|
+
* following runs into themselves until their close part pops the frame (the
|
|
26
|
+
* renderer's frame stack persists across segments). Stray closes at the top
|
|
27
|
+
* level render nothing (the sanitizer/parser would drop them anyway), and
|
|
28
|
+
* frames still open at the end of the document are closed like a browser
|
|
29
|
+
* parser would. Sanitization runs once per prepared change, in a memo.
|
|
30
|
+
*/
|
|
31
|
+
export declare function MarkdownDocument({ info, media, codeLabels }: MarkdownDocumentProps): ReactNode;
|
|
32
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Placeholder shown when a persisted tab's type is not registered (the
|
|
3
|
+
* contributing plugin is not installed / not yet loaded). The tab is kept
|
|
4
|
+
* in state so it can recover if the plugin loads later; the user can close
|
|
5
|
+
* it through the tab bar's X button as usual. This is the graceful-
|
|
6
|
+
* degradation path for the open tab-type set: {@link Sidebar} renders this
|
|
7
|
+
* instead of crashing on an unknown type.
|
|
8
|
+
*/
|
|
9
|
+
import type { ReactNode } from 'react';
|
|
10
|
+
import type { TabComponentProps } from './service.ts';
|
|
11
|
+
export declare function OrphanedTab(props: TabComponentProps): ReactNode;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const RELEASE_NOTE_ACK_KEY = "dsh-better-sidebar:release-note:acknowledged-version";
|
|
2
|
+
/** Detect an existing installation before createSidebarStore can write any state. */
|
|
3
|
+
export declare function hasPriorSidebarInstall(storage: Storage): boolean;
|
|
4
|
+
interface ReleaseNotesDialogProps {
|
|
5
|
+
packageName: string;
|
|
6
|
+
version: string;
|
|
7
|
+
priorInstall: boolean;
|
|
8
|
+
}
|
|
9
|
+
/** Upgrade-only, exact-version release-note dialog. Closing it acknowledges this version. */
|
|
10
|
+
export declare function ReleaseNotesDialog({ packageName, version, priorInstall }: ReleaseNotesDialogProps): JSX.Element | null;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The generic render error boundary for the sidebar tree: a render error in
|
|
3
|
+
* the wrapped subtree shows a dismissible error strip (retry re-renders the
|
|
4
|
+
* children) instead of blanking the shell. Used at two scopes:
|
|
5
|
+
*
|
|
6
|
+
* - ROOT (index.tsx, `css.boundaryError`): last-resort containment for
|
|
7
|
+
* errors in the sidebar shell itself (Workbench, drag layout, …) — a full
|
|
8
|
+
* swap keeps the page alive.
|
|
9
|
+
* - PER-TAB (Sidebar.tsx TabContent, `css.tabBoundaryError`): a crashing
|
|
10
|
+
* viewer/editor shows a strip inside ITS OWN pane; the toggle cluster, the
|
|
11
|
+
* other tabs, and the panel itself stay alive (issue #31 — a tab crash
|
|
12
|
+
* must never take down the whole sidebar).
|
|
13
|
+
*
|
|
14
|
+
* The className prop selects the strip's geometry: the root's full-height
|
|
15
|
+
* fixed rail vs. the tab's pane-filling block.
|
|
16
|
+
*/
|
|
17
|
+
import { Component, type ErrorInfo, type ReactNode } from 'react';
|
|
18
|
+
export declare class RenderBoundary extends Component<{
|
|
19
|
+
children?: ReactNode;
|
|
20
|
+
className?: string;
|
|
21
|
+
}, {
|
|
22
|
+
error: string | null;
|
|
23
|
+
}> {
|
|
24
|
+
state: {
|
|
25
|
+
error: string | null;
|
|
26
|
+
};
|
|
27
|
+
static getDerivedStateFromError(error: unknown): {
|
|
28
|
+
error: string;
|
|
29
|
+
};
|
|
30
|
+
componentDidCatch(error: Error, info: ErrorInfo): void;
|
|
31
|
+
render(): ReactNode;
|
|
32
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare function SandboxStatusBar(props: {
|
|
2
|
+
/** The effective sandbox state (global pref OR the local temporary unlock). */
|
|
3
|
+
sandboxed: boolean;
|
|
4
|
+
/** Whether the sandbox is off due to the LOCAL temporary unlock (shows the restore action). */
|
|
5
|
+
local: boolean;
|
|
6
|
+
/** The red-state explanation (e.g. "the page runs with full GUI privileges"). */
|
|
7
|
+
dangerCopy: string;
|
|
8
|
+
onUnlock: () => void;
|
|
9
|
+
onRestore: () => void;
|
|
10
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots';
|
|
2
|
+
import { type SidebarPrefs } from '../prefs-shared.ts';
|
|
3
|
+
import type { SidebarStore } from './state.ts';
|
|
4
|
+
import type { BetterSidebarService, FileViewerDescriptor, SidebarSettingToggle, TabDescriptor } from './service.ts';
|
|
5
|
+
/** Injected business face: the shared store (prefs cache) + the sidebar service (registries). */
|
|
6
|
+
export interface SideCardSectionInjected {
|
|
7
|
+
store: SidebarStore;
|
|
8
|
+
service: BetterSidebarService;
|
|
9
|
+
}
|
|
10
|
+
/** Full section props: the runtime share plus the injected face. */
|
|
11
|
+
export type SideCardSectionProps = PropsRuntime<'settings.section'> & SideCardSectionInjected;
|
|
12
|
+
/**
|
|
13
|
+
* Merge one plugin-owned setting into a pluginSettings map (pure, v0.12.0+).
|
|
14
|
+
* Sequential merges are additive: each call spreads the map it was GIVEN,
|
|
15
|
+
* so building from the latest optimistic map keeps earlier keys intact
|
|
16
|
+
* (two same-tick writes must not drop each other).
|
|
17
|
+
*/
|
|
18
|
+
export declare function mergePluginSetting(pluginSettings: Record<string, Record<string, unknown>>, descriptorId: string, key: string, value: unknown): Record<string, Record<string, unknown>>;
|
|
19
|
+
/**
|
|
20
|
+
* The body of a feature's secondary settings popup: one row (title/desc +
|
|
21
|
+
* control) per declared setting. Switches render the custom switch; text and
|
|
22
|
+
* number rows render a free-form / numeric input committed on blur/Enter
|
|
23
|
+
* (clamped to the declared min/max). Extracted so the rows are testable
|
|
24
|
+
* without opening the Modal (the Modal portal renders only while open).
|
|
25
|
+
*/
|
|
26
|
+
export declare function FeatureSettingsRows(props: {
|
|
27
|
+
toggles: readonly SidebarSettingToggle[];
|
|
28
|
+
prefs: SidebarPrefs;
|
|
29
|
+
onToggle: (toggle: SidebarSettingToggle, next: boolean) => void;
|
|
30
|
+
/** Commit one text/number row; returns the canonical value the row should
|
|
31
|
+
* display (clamped for numbers, the current pref when the input is
|
|
32
|
+
* invalid). Optional: rows with no handler keep their draft. */
|
|
33
|
+
onCommit?: (toggle: SidebarSettingToggle, raw: string) => string;
|
|
34
|
+
/** Commit one select row: the picked option's value (single) or the array
|
|
35
|
+
* of picked values (`multi: true`). Optional: rows with no handler are
|
|
36
|
+
* display-only. */
|
|
37
|
+
onSelectValue?: (toggle: SidebarSettingToggle, next: unknown) => void;
|
|
38
|
+
/** Explicit value source (v0.12.0+): when given, rows read their values
|
|
39
|
+
* from it instead of the `prefs` face — plugin-owned rows read their
|
|
40
|
+
* own blob, so a plugin key can never collide with (or silently read)
|
|
41
|
+
* a host pref of the same name. (Named `valueSource`, not `valueOf`:
|
|
42
|
+
* the latter collides with the inherited Object.prototype.valueOf.) */
|
|
43
|
+
valueSource?: (key: string) => unknown;
|
|
44
|
+
}): import("react").JSX.Element;
|
|
45
|
+
/**
|
|
46
|
+
* The secondary settings popup body of one feature (tab or viewer):
|
|
47
|
+
* - the host-prefs `toggles` rows, then the plugin-owned `pluginToggles`
|
|
48
|
+
* rows (their values live in `pluginSettings[feature.id]`, projected onto
|
|
49
|
+
* the prefs face so the shared row renderer reads them);
|
|
50
|
+
* - `settings.render` (custom panel) AFTER those rows when declared — the
|
|
51
|
+
* custom panel is an extension of the row list, not a replacement, so a
|
|
52
|
+
* feature can keep its declarative rows (e.g. the editor's
|
|
53
|
+
* open-behavior picker) and still ship a custom configuration area.
|
|
54
|
+
*/
|
|
55
|
+
export declare function SettingsBody(props: {
|
|
56
|
+
feature: TabDescriptor | FileViewerDescriptor;
|
|
57
|
+
prefs: SidebarPrefs;
|
|
58
|
+
store: SidebarStore;
|
|
59
|
+
service: BetterSidebarService;
|
|
60
|
+
onToggle: (toggle: SidebarSettingToggle, next: boolean) => void;
|
|
61
|
+
onCommit: (toggle: SidebarSettingToggle, raw: string) => string;
|
|
62
|
+
onSelectValue: (toggle: SidebarSettingToggle, next: unknown) => void;
|
|
63
|
+
onPluginToggle: (toggle: SidebarSettingToggle, next: boolean) => void;
|
|
64
|
+
onPluginCommit: (toggle: SidebarSettingToggle, raw: string) => string;
|
|
65
|
+
onPluginSelectValue: (toggle: SidebarSettingToggle, next: unknown) => void;
|
|
66
|
+
onPluginWrite: (key: string, value: unknown) => void;
|
|
67
|
+
onClose: () => void;
|
|
68
|
+
}): import("react").JSX.Element | null;
|
|
69
|
+
/**
|
|
70
|
+
* Render the Side card preferences section.
|
|
71
|
+
* @param props - composed slot props (runtime share + injected store/service).
|
|
72
|
+
* @returns the section element tree.
|
|
73
|
+
*/
|
|
74
|
+
export declare function SideCardSection({ store, service }: SideCardSectionProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Context } from '../context-types.ts';
|
|
2
|
+
import { type SidebarStore } from './state.ts';
|
|
3
|
+
/** Public CLI documentation opened by the persistent top-right manual action. */
|
|
4
|
+
export declare const USER_MANUAL_URL = "https://chatcode.chinaunicom.cn/doc/cli/";
|
|
5
|
+
export declare function Sidebar(props: {
|
|
6
|
+
ctx: Context;
|
|
7
|
+
store: SidebarStore;
|
|
8
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The tab strip of one pane: tabs capped at TAB_MAX_WIDTH (ellipsized),
|
|
3
|
+
* overflow scrolls horizontally, a close button per tab, a four-way split
|
|
4
|
+
* button cluster, and the + menu that opens new tabs (explorer / git /
|
|
5
|
+
* terminal). Tabs are draggable; dropping onto another tab inserts before it,
|
|
6
|
+
* dropping on the strip background appends to this pane. Right-clicking a
|
|
7
|
+
* tab opens the tab context menu (float as a free window / close / close
|
|
8
|
+
* others / close to the left / close to the right, the close ones scoped to
|
|
9
|
+
* this pane).
|
|
10
|
+
*/
|
|
11
|
+
import { type ReactNode } from 'react';
|
|
12
|
+
import type { SidebarTab } from './state.ts';
|
|
13
|
+
/** One + menu option. */
|
|
14
|
+
export interface NewTabOption {
|
|
15
|
+
id: string;
|
|
16
|
+
label: string;
|
|
17
|
+
disabled?: boolean;
|
|
18
|
+
/** Leading icon (Menu row). */
|
|
19
|
+
icon?: ReactNode;
|
|
20
|
+
}
|
|
21
|
+
/** Drag payload for tab moves (HTML5 DnD dataTransfer). */
|
|
22
|
+
export declare const TAB_DRAG_TYPE = "application/x-dsh-tab";
|
|
23
|
+
export interface TabDragPayload {
|
|
24
|
+
tabId: string;
|
|
25
|
+
paneId: string;
|
|
26
|
+
}
|
|
27
|
+
export declare function serializeDrag(payload: TabDragPayload): string;
|
|
28
|
+
export declare function parseDrag(raw: string): TabDragPayload | null;
|
|
29
|
+
export declare function TabBar(props: {
|
|
30
|
+
paneId: string;
|
|
31
|
+
tabs: SidebarTab[];
|
|
32
|
+
active: string | null;
|
|
33
|
+
onActivate: (tabId: string) => void;
|
|
34
|
+
onClose: (tabId: string) => void;
|
|
35
|
+
onNewTab: (optionId: string) => void;
|
|
36
|
+
newTabOptions: NewTabOption[];
|
|
37
|
+
/** Drop of a tab from any pane: (payload, insertBeforeTabId | null). */
|
|
38
|
+
onDropTab: (payload: TabDragPayload, before: string | null) => void;
|
|
39
|
+
/** Float a tab out as a free window (the tab context menu's entry; the
|
|
40
|
+
* drag-to-conversation gesture is handled at the Sidebar shell level). */
|
|
41
|
+
onFloatTab: (tabId: string) => void;
|
|
42
|
+
/**
|
|
43
|
+
* Pin/unpin a terminal tab (v0.17.0+). Called with `'workspace'` or
|
|
44
|
+
* `'global'` to pin (the shell snapshots the home cwd), or `null` to
|
|
45
|
+
* unpin. Non-terminal tabs never trigger this callback. Optional: the
|
|
46
|
+
* menu hides the pin entry when unset (legacy callers).
|
|
47
|
+
*/
|
|
48
|
+
onPinTab?: (tabId: string, scope: 'workspace' | 'global' | null) => void;
|
|
49
|
+
/** Icon resolver for tab labels (reads from the tab descriptor registry). */
|
|
50
|
+
getTabIcon?: (tab: SidebarTab) => ReactNode;
|
|
51
|
+
/** Badge resolver for tab labels (reads the descriptor's `badge`; the
|
|
52
|
+
* resolver returns the rendered pill or null). */
|
|
53
|
+
getTabBadge?: (tab: SidebarTab) => ReactNode;
|
|
54
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import '@xterm/xterm/css/xterm.css';
|
|
2
|
+
import { type SessionScope, type TerminalDepsStatus } from './api.ts';
|
|
3
|
+
import { type SidebarStore } from './state.ts';
|
|
4
|
+
/** The degraded-mode payload rendered by {@link TerminalDepsBanner}. */
|
|
5
|
+
type TerminalDepsInfo = Extract<TerminalDepsStatus, {
|
|
6
|
+
ok: false;
|
|
7
|
+
}>;
|
|
8
|
+
export declare function TerminalView(props: {
|
|
9
|
+
scope: SessionScope;
|
|
10
|
+
tabId: string;
|
|
11
|
+
store: SidebarStore;
|
|
12
|
+
}): import("react").JSX.Element;
|
|
13
|
+
/**
|
|
14
|
+
* The node-pty dependency failure banner (issue #140): explains that the
|
|
15
|
+
* terminal's native dependency failed to load and shows the PASTEABLE repair
|
|
16
|
+
* command (bash / cmd / PowerShell) with a copy button — the user pastes it
|
|
17
|
+
* into a terminal where their DSH profile lives and runs it, then retries.
|
|
18
|
+
* Extracted as a standalone component for direct testing.
|
|
19
|
+
*/
|
|
20
|
+
export declare function TerminalDepsBanner(props: {
|
|
21
|
+
deps: TerminalDepsInfo;
|
|
22
|
+
onRetry: () => void;
|
|
23
|
+
}): import("react").JSX.Element;
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { FileViewerProps } from './service.ts';
|
|
2
|
+
/**
|
|
3
|
+
* The sandbox tokens of the HTML preview iframe. NO allow-same-origin (the
|
|
4
|
+
* preview must stay in an opaque origin — with the route's own origin it
|
|
5
|
+
* could read session data) and NO allow-top-navigation (a previewed page
|
|
6
|
+
* must not hijack the GUI). The user can disable the sandbox per-feature
|
|
7
|
+
* in the side card settings (warned); the toggle below reflects it.
|
|
8
|
+
*/
|
|
9
|
+
export declare const HTML_IFRAME_SANDBOX = "allow-scripts allow-popups allow-downloads allow-modals";
|
|
10
|
+
export declare function TextEditor(props: FileViewerProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { SidebarStore } from './state.ts';
|
|
2
|
+
import type { OpenWithTarget } from './open-with.ts';
|
|
3
|
+
export declare function TreePanel(props: {
|
|
4
|
+
sessionId: string;
|
|
5
|
+
cwd: string | undefined;
|
|
6
|
+
/** The sidebar store (passed through to the tree's fence-refusal notice). */
|
|
7
|
+
store: SidebarStore;
|
|
8
|
+
expanded: string[];
|
|
9
|
+
revealed: string[];
|
|
10
|
+
onToggle: (path: string) => void;
|
|
11
|
+
onOpenFile: (path: string) => void;
|
|
12
|
+
/** File context-menu "open in a new tab" (passed through to FileTree). */
|
|
13
|
+
onOpenFileNewTab?: (path: string) => void;
|
|
14
|
+
/** File context-menu "open to the side" (passed through to FileTree). */
|
|
15
|
+
onOpenFileSide?: (path: string) => void;
|
|
16
|
+
/** The "open with" menu surface (passed through to FileTree; absent →
|
|
17
|
+
* the whole section is hidden). */
|
|
18
|
+
openWithTargets?: OpenWithTarget[];
|
|
19
|
+
openWithPinned?: string[];
|
|
20
|
+
openWithSsh?: boolean;
|
|
21
|
+
onOpenWith?: (targetId: string, path: string) => void;
|
|
22
|
+
onToggleOpenWithPin?: (targetId: string) => void;
|
|
23
|
+
onReferenceFile: (path: string) => void;
|
|
24
|
+
/** Full-window presentation: the panel fills its host instead of docking
|
|
25
|
+
* at a fixed width. */
|
|
26
|
+
full?: boolean;
|
|
27
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
interface UpdateDialogProps {
|
|
2
|
+
open: boolean;
|
|
3
|
+
onClose: () => void;
|
|
4
|
+
/** 'dialog' wraps content in a full-screen overlay; 'inline' renders the
|
|
5
|
+
* same content bare so it can sit inside the host Settings panel without
|
|
6
|
+
* a second backdrop. */
|
|
7
|
+
variant?: 'dialog' | 'inline';
|
|
8
|
+
}
|
|
9
|
+
export declare function UpdateDialog({ open, onClose, variant }: UpdateDialogProps): JSX.Element | null;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function UpdateSettingsPanel(): JSX.Element;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The "更新" settings section: a dedicated nav entry in the DSH Settings
|
|
3
|
+
* shell (sibling of 侧边卡片 / Token 用量 / AI 代码占比) hosting the
|
|
4
|
+
* one-click ChatCode upgrade entry. It surfaces the reusable
|
|
5
|
+
* {@link UpdateSettingsPanel} row in the section body.
|
|
6
|
+
*/
|
|
7
|
+
import type { PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots';
|
|
8
|
+
/** Full section props: the settings shell's runtime share (close, …). */
|
|
9
|
+
export type UpdateSettingsSectionProps = PropsRuntime<'settings.section'>;
|
|
10
|
+
export declare function UpdateSettingsSection(_props: UpdateSettingsSectionProps): JSX.Element;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Full-window upload progress over the files tree: a blurred scrim (same mask
|
|
3
|
+
* token as the repo's Modal primitive) with a card showing the target
|
|
4
|
+
* directory, file-level progress, and a cancel button. Esc cancels too —
|
|
5
|
+
* clicking the scrim does not, so a stray click can never abort an upload.
|
|
6
|
+
* Rendered inside TreePanel (absolute inset-0), so it covers only the file
|
|
7
|
+
* window and never the conversation column.
|
|
8
|
+
*/
|
|
9
|
+
import { type ReactNode } from 'react';
|
|
10
|
+
export declare function UploadOverlay(props: {
|
|
11
|
+
/** Absolute upload directory (the session workspace or a tree directory). */
|
|
12
|
+
dir: string;
|
|
13
|
+
done: number;
|
|
14
|
+
total: number;
|
|
15
|
+
/** Relative path of the file being uploaded ('' when none is in flight). */
|
|
16
|
+
current: string;
|
|
17
|
+
onCancel: () => void;
|
|
18
|
+
/** True while cancellation is in flight (disables the cancel button). */
|
|
19
|
+
cancelling?: boolean;
|
|
20
|
+
}): ReactNode;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots';
|
|
2
|
+
/** Full section props: the settings shell's runtime share (close, …). */
|
|
3
|
+
export type UsageHeatmapSectionProps = PropsRuntime<'settings.section'>;
|
|
4
|
+
export declare function UsageHeatmapSection(_props: UsageHeatmapSectionProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { BetterSidebarService } from './service.ts';
|
|
2
|
+
/** Which extension point the modal is adding a plugin for. */
|
|
3
|
+
export type PluginKind = 'tab' | 'viewer';
|
|
4
|
+
/** The modal body: the GitHub topic button + the recommended plugin list
|
|
5
|
+
* with per-entry jump/copy buttons (extracted for direct testing). */
|
|
6
|
+
export declare function PluginListBody(props: {
|
|
7
|
+
service: BetterSidebarService;
|
|
8
|
+
kind: PluginKind;
|
|
9
|
+
}): import("react").JSX.Element;
|
|
10
|
+
/** The modal itself (mounted only while open — see the module comment). */
|
|
11
|
+
export declare function AddPluginModal(props: {
|
|
12
|
+
service: BetterSidebarService;
|
|
13
|
+
onClose: () => void;
|
|
14
|
+
kind: PluginKind;
|
|
15
|
+
}): import("react").JSX.Element;
|