@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.
Files changed (329) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +554 -0
  3. package/README_EN.md +563 -0
  4. package/assets/logo.svg +1 -0
  5. package/cordis.patch.yml +79 -0
  6. package/lib/client-editor.js +55744 -0
  7. package/lib/client-mermaid.js +208256 -0
  8. package/lib/client-registry.js +30378 -0
  9. package/lib/client-terminal.js +16894 -0
  10. package/lib/client.js +30378 -0
  11. package/lib/index.js +6897 -0
  12. package/lib/invariant.js +22 -0
  13. package/lib/types/agent-opens.d.ts +65 -0
  14. package/lib/types/agent-pty.d.ts +226 -0
  15. package/lib/types/browser-probe.d.ts +15 -0
  16. package/lib/types/bundle-route.d.ts +12 -0
  17. package/lib/types/chatcode-update.d.ts +47 -0
  18. package/lib/types/client/AccountMenu.d.ts +1 -0
  19. package/lib/types/client/AiRatioSection.d.ts +3 -0
  20. package/lib/types/client/BrowserView.d.ts +39 -0
  21. package/lib/types/client/ChatcodeGate.d.ts +6 -0
  22. package/lib/types/client/CodingPlanModelsSettings.d.ts +9 -0
  23. package/lib/types/client/DiffTab.d.ts +6 -0
  24. package/lib/types/client/DiffView.d.ts +51 -0
  25. package/lib/types/client/EditorHost.d.ts +13 -0
  26. package/lib/types/client/FenceErrorNotice.d.ts +5 -0
  27. package/lib/types/client/FileTree.d.ts +41 -0
  28. package/lib/types/client/FreeWindow.d.ts +29 -0
  29. package/lib/types/client/GitView.d.ts +12 -0
  30. package/lib/types/client/MarkdownHtml.d.ts +32 -0
  31. package/lib/types/client/OrphanedTab.d.ts +11 -0
  32. package/lib/types/client/PdfView.d.ts +6 -0
  33. package/lib/types/client/ReleaseNotesDialog.d.ts +11 -0
  34. package/lib/types/client/RenderBoundary.d.ts +32 -0
  35. package/lib/types/client/SandboxStatusBar.d.ts +10 -0
  36. package/lib/types/client/SideCardSection.d.ts +74 -0
  37. package/lib/types/client/Sidebar.d.ts +8 -0
  38. package/lib/types/client/TabBar.d.ts +54 -0
  39. package/lib/types/client/TerminalView.d.ts +24 -0
  40. package/lib/types/client/TextEditor.d.ts +10 -0
  41. package/lib/types/client/TreePanel.d.ts +27 -0
  42. package/lib/types/client/UpdateDialog.d.ts +10 -0
  43. package/lib/types/client/UpdateSettingsPanel.d.ts +1 -0
  44. package/lib/types/client/UpdateSettingsSection.d.ts +10 -0
  45. package/lib/types/client/UploadOverlay.d.ts +20 -0
  46. package/lib/types/client/UsageHeatmapSection.d.ts +4 -0
  47. package/lib/types/client/add-plugin-modal.d.ts +15 -0
  48. package/lib/types/client/api.d.ts +345 -0
  49. package/lib/types/client/binary-download.d.ts +12 -0
  50. package/lib/types/client/breakpoints.d.ts +17 -0
  51. package/lib/types/client/browser.d.ts +60 -0
  52. package/lib/types/client/builtins/index.d.ts +18 -0
  53. package/lib/types/client/builtins/tabs.d.ts +11 -0
  54. package/lib/types/client/builtins/viewers.d.ts +3 -0
  55. package/lib/types/client/chat-presentation.d.ts +13 -0
  56. package/lib/types/client/chunk-loader.d.ts +124 -0
  57. package/lib/types/client/chunks/editor.d.ts +9 -0
  58. package/lib/types/client/chunks/mermaid.d.ts +10 -0
  59. package/lib/types/client/chunks/terminal.d.ts +9 -0
  60. package/lib/types/client/cm-themes.d.ts +24 -0
  61. package/lib/types/client/conversation-draft.d.ts +14 -0
  62. package/lib/types/client/desktop-env.d.ts +35 -0
  63. package/lib/types/client/editor-load.d.ts +66 -0
  64. package/lib/types/client/frame-batcher.d.ts +24 -0
  65. package/lib/types/client/icons.d.ts +66 -0
  66. package/lib/types/client/image-types.d.ts +3 -0
  67. package/lib/types/client/ime-guard.d.ts +36 -0
  68. package/lib/types/client/index.d.ts +19 -0
  69. package/lib/types/client/intercept.d.ts +44 -0
  70. package/lib/types/client/lang.d.ts +14 -0
  71. package/lib/types/client/layout-push.d.ts +15 -0
  72. package/lib/types/client/lazy-chunk.d.ts +25 -0
  73. package/lib/types/client/link-intercept.d.ts +42 -0
  74. package/lib/types/client/locales-ar.d.ts +18 -0
  75. package/lib/types/client/locales-de.d.ts +4 -0
  76. package/lib/types/client/locales-fr.d.ts +10 -0
  77. package/lib/types/client/locales-hi.d.ts +17 -0
  78. package/lib/types/client/locales-id.d.ts +15 -0
  79. package/lib/types/client/locales-it.d.ts +8 -0
  80. package/lib/types/client/locales-ja.d.ts +17 -0
  81. package/lib/types/client/locales-ko.d.ts +9 -0
  82. package/lib/types/client/locales-nl.d.ts +16 -0
  83. package/lib/types/client/locales-pl.d.ts +19 -0
  84. package/lib/types/client/locales-pt.d.ts +1 -0
  85. package/lib/types/client/locales-ru.d.ts +13 -0
  86. package/lib/types/client/locales-sv.d.ts +1 -0
  87. package/lib/types/client/locales-th.d.ts +17 -0
  88. package/lib/types/client/locales-tr.d.ts +17 -0
  89. package/lib/types/client/locales-vi.d.ts +17 -0
  90. package/lib/types/client/locales-zh-HK.d.ts +32 -0
  91. package/lib/types/client/locales-zh-MO.d.ts +32 -0
  92. package/lib/types/client/locales-zh-TW.d.ts +32 -0
  93. package/lib/types/client/locales.d.ts +571 -0
  94. package/lib/types/client/markdown-html.d.ts +96 -0
  95. package/lib/types/client/markdown-images.d.ts +45 -0
  96. package/lib/types/client/markdown-labels.d.ts +21 -0
  97. package/lib/types/client/md-toc.d.ts +4 -0
  98. package/lib/types/client/mermaid-blocks.d.ts +47 -0
  99. package/lib/types/client/mermaid-sanitize.d.ts +2 -0
  100. package/lib/types/client/mermaid.d.ts +12 -0
  101. package/lib/types/client/open-when-sized.d.ts +20 -0
  102. package/lib/types/client/open-with-settings.d.ts +4 -0
  103. package/lib/types/client/open-with.d.ts +87 -0
  104. package/lib/types/client/openpath-intercept.d.ts +52 -0
  105. package/lib/types/client/paths.d.ts +43 -0
  106. package/lib/types/client/pdf-types.d.ts +2 -0
  107. package/lib/types/client/pinned.d.ts +86 -0
  108. package/lib/types/client/plugin-settings.d.ts +8 -0
  109. package/lib/types/client/plugins-shared.d.ts +27 -0
  110. package/lib/types/client/plugins-tabs.d.ts +3 -0
  111. package/lib/types/client/plugins-viewers.d.ts +3 -0
  112. package/lib/types/client/prefs.d.ts +41 -0
  113. package/lib/types/client/produced-files.d.ts +29 -0
  114. package/lib/types/client/selection-payload.d.ts +27 -0
  115. package/lib/types/client/service.d.ts +445 -0
  116. package/lib/types/client/session-pins.d.ts +14 -0
  117. package/lib/types/client/settings-nav-icon.d.ts +27 -0
  118. package/lib/types/client/shell-presets.d.ts +48 -0
  119. package/lib/types/client/split-pane.d.ts +38 -0
  120. package/lib/types/client/state.d.ts +480 -0
  121. package/lib/types/client/tab-content-memo.d.ts +40 -0
  122. package/lib/types/client/terminal-font.d.ts +78 -0
  123. package/lib/types/client/terminal-links.d.ts +119 -0
  124. package/lib/types/client/theme.d.ts +45 -0
  125. package/lib/types/client/titlebar-strip.d.ts +23 -0
  126. package/lib/types/client/ui-tweaks/appicons.d.ts +16 -0
  127. package/lib/types/client/ui-tweaks/archive.d.ts +42 -0
  128. package/lib/types/client/ui-tweaks/branding.d.ts +45 -0
  129. package/lib/types/client/ui-tweaks/cachehit.d.ts +41 -0
  130. package/lib/types/client/ui-tweaks/gitbar.d.ts +103 -0
  131. package/lib/types/client/ui-tweaks/index.d.ts +279 -0
  132. package/lib/types/client/ui-tweaks/mcp.d.ts +28 -0
  133. package/lib/types/client/ui-tweaks/notifier.d.ts +125 -0
  134. package/lib/types/client/ui-tweaks/whale.d.ts +55 -0
  135. package/lib/types/client/upload.d.ts +69 -0
  136. package/lib/types/client/useChatcodeAccount.d.ts +10 -0
  137. package/lib/types/client/wco.d.ts +47 -0
  138. package/lib/types/codingplan.d.ts +37 -0
  139. package/lib/types/config.d.ts +95 -0
  140. package/lib/types/context-types.d.ts +540 -0
  141. package/lib/types/fs-operations.d.ts +30 -0
  142. package/lib/types/fs-search.d.ts +24 -0
  143. package/lib/types/fs-tree.d.ts +51 -0
  144. package/lib/types/git.d.ts +124 -0
  145. package/lib/types/html-route.d.ts +59 -0
  146. package/lib/types/index.d.ts +47 -0
  147. package/lib/types/invariant.d.ts +15 -0
  148. package/lib/types/login-route.d.ts +2 -0
  149. package/lib/types/open-external.d.ts +24 -0
  150. package/lib/types/path-security.d.ts +26 -0
  151. package/lib/types/prefs-shared.d.ts +257 -0
  152. package/lib/types/pty-deps.d.ts +79 -0
  153. package/lib/types/pty-manager.d.ts +168 -0
  154. package/lib/types/tools.d.ts +34 -0
  155. package/lib/types/trust-fence.d.ts +24 -0
  156. package/lib/types/ui-tweaks/archive.d.ts +71 -0
  157. package/lib/types/ui-tweaks/config.d.ts +186 -0
  158. package/lib/types/ui-tweaks/git-web.d.ts +43 -0
  159. package/lib/types/ui-tweaks/git.d.ts +311 -0
  160. package/lib/types/ui-tweaks/index.d.ts +17 -0
  161. package/lib/types/ui-tweaks/mcp.d.ts +103 -0
  162. package/lib/types/ui-tweaks/turn-outcome.d.ts +57 -0
  163. package/lib/types/ui-tweaks/web.d.ts +55 -0
  164. package/lib/types/wire.d.ts +38 -0
  165. package/package.json +213 -0
  166. package/scripts/install.ps1 +310 -0
  167. package/scripts/install.sh +287 -0
  168. package/src/agent-opens.ts +265 -0
  169. package/src/agent-pty.ts +527 -0
  170. package/src/browser-probe.ts +26 -0
  171. package/src/bundle-route.ts +129 -0
  172. package/src/chatcode-update.ts +193 -0
  173. package/src/client/AccountMenu.tsx +177 -0
  174. package/src/client/AiRatioSection.module.css +329 -0
  175. package/src/client/AiRatioSection.tsx +292 -0
  176. package/src/client/BrowserView.tsx +289 -0
  177. package/src/client/ChatcodeGate.tsx +35 -0
  178. package/src/client/CodingPlanModelsSettings.module.css +118 -0
  179. package/src/client/CodingPlanModelsSettings.tsx +101 -0
  180. package/src/client/DiffTab.tsx +114 -0
  181. package/src/client/DiffView.tsx +305 -0
  182. package/src/client/EditorHost.tsx +563 -0
  183. package/src/client/FenceErrorNotice.tsx +40 -0
  184. package/src/client/FileTree.tsx +701 -0
  185. package/src/client/FreeWindow.tsx +337 -0
  186. package/src/client/GitView.tsx +722 -0
  187. package/src/client/MarkdownHtml.tsx +296 -0
  188. package/src/client/OrphanedTab.tsx +27 -0
  189. package/src/client/PdfView.tsx +110 -0
  190. package/src/client/ReleaseNotesDialog.tsx +91 -0
  191. package/src/client/RenderBoundary.tsx +49 -0
  192. package/src/client/SandboxStatusBar.tsx +60 -0
  193. package/src/client/SideCardSection.module.css +932 -0
  194. package/src/client/SideCardSection.tsx +1169 -0
  195. package/src/client/Sidebar.tsx +1857 -0
  196. package/src/client/TabBar.tsx +365 -0
  197. package/src/client/TerminalView.tsx +424 -0
  198. package/src/client/TextEditor.tsx +468 -0
  199. package/src/client/TreePanel.tsx +279 -0
  200. package/src/client/UpdateDialog.tsx +186 -0
  201. package/src/client/UpdateSettingsPanel.tsx +29 -0
  202. package/src/client/UpdateSettingsSection.tsx +22 -0
  203. package/src/client/UploadOverlay.tsx +62 -0
  204. package/src/client/UsageHeatmapSection.module.css +440 -0
  205. package/src/client/UsageHeatmapSection.tsx +301 -0
  206. package/src/client/add-plugin-modal.tsx +199 -0
  207. package/src/client/api.ts +433 -0
  208. package/src/client/binary-download.tsx +23 -0
  209. package/src/client/breakpoints.ts +61 -0
  210. package/src/client/browser.ts +167 -0
  211. package/src/client/builtins/index.ts +37 -0
  212. package/src/client/builtins/tabs.tsx +275 -0
  213. package/src/client/builtins/viewers.tsx +125 -0
  214. package/src/client/chat-presentation.ts +95 -0
  215. package/src/client/chunk-loader.ts +350 -0
  216. package/src/client/chunks/editor.tsx +9 -0
  217. package/src/client/chunks/mermaid.tsx +10 -0
  218. package/src/client/chunks/terminal.tsx +9 -0
  219. package/src/client/cm-themes.ts +129 -0
  220. package/src/client/conversation-draft.ts +29 -0
  221. package/src/client/css-modules.d.ts +5 -0
  222. package/src/client/desktop-env.ts +72 -0
  223. package/src/client/editor-load.ts +92 -0
  224. package/src/client/frame-batcher.ts +56 -0
  225. package/src/client/icons.tsx +170 -0
  226. package/src/client/image-types.ts +8 -0
  227. package/src/client/ime-guard.ts +47 -0
  228. package/src/client/index.tsx +501 -0
  229. package/src/client/intercept.tsx +172 -0
  230. package/src/client/lang.ts +225 -0
  231. package/src/client/layout-push.ts +37 -0
  232. package/src/client/layout.css +156 -0
  233. package/src/client/lazy-chunk.tsx +89 -0
  234. package/src/client/link-intercept.ts +73 -0
  235. package/src/client/locales-ar.ts +387 -0
  236. package/src/client/locales-de.ts +372 -0
  237. package/src/client/locales-fr.ts +379 -0
  238. package/src/client/locales-hi.ts +386 -0
  239. package/src/client/locales-id.ts +384 -0
  240. package/src/client/locales-it.ts +377 -0
  241. package/src/client/locales-ja.ts +486 -0
  242. package/src/client/locales-ko.ts +378 -0
  243. package/src/client/locales-nl.ts +384 -0
  244. package/src/client/locales-pl.ts +388 -0
  245. package/src/client/locales-pt.ts +369 -0
  246. package/src/client/locales-ru.ts +384 -0
  247. package/src/client/locales-sv.ts +369 -0
  248. package/src/client/locales-th.ts +386 -0
  249. package/src/client/locales-tr.ts +386 -0
  250. package/src/client/locales-vi.ts +386 -0
  251. package/src/client/locales-zh-HK.ts +401 -0
  252. package/src/client/locales-zh-MO.ts +401 -0
  253. package/src/client/locales-zh-TW.ts +401 -0
  254. package/src/client/locales.ts +1229 -0
  255. package/src/client/markdown-html.ts +331 -0
  256. package/src/client/markdown-images.ts +137 -0
  257. package/src/client/markdown-labels.tsx +31 -0
  258. package/src/client/md-toc.tsx +127 -0
  259. package/src/client/mermaid-blocks.ts +110 -0
  260. package/src/client/mermaid-sanitize.ts +93 -0
  261. package/src/client/mermaid.tsx +406 -0
  262. package/src/client/open-when-sized.ts +43 -0
  263. package/src/client/open-with-settings.tsx +135 -0
  264. package/src/client/open-with.ts +221 -0
  265. package/src/client/openpath-intercept.ts +79 -0
  266. package/src/client/paths.ts +63 -0
  267. package/src/client/pdf-types.ts +4 -0
  268. package/src/client/pinned.ts +184 -0
  269. package/src/client/plugin-settings.ts +43 -0
  270. package/src/client/plugins-shared.ts +29 -0
  271. package/src/client/plugins-tabs.ts +153 -0
  272. package/src/client/plugins-viewers.ts +44 -0
  273. package/src/client/prefs.ts +216 -0
  274. package/src/client/produced-files.ts +120 -0
  275. package/src/client/selection-payload.ts +86 -0
  276. package/src/client/service.ts +873 -0
  277. package/src/client/session-pins.tsx +334 -0
  278. package/src/client/settings-nav-icon.ts +55 -0
  279. package/src/client/shell-presets.ts +83 -0
  280. package/src/client/sidebar.module.css +3607 -0
  281. package/src/client/split-pane.tsx +333 -0
  282. package/src/client/state.ts +1646 -0
  283. package/src/client/tab-content-memo.ts +55 -0
  284. package/src/client/terminal-font.ts +224 -0
  285. package/src/client/terminal-links.ts +194 -0
  286. package/src/client/theme.ts +110 -0
  287. package/src/client/titlebar-strip.ts +37 -0
  288. package/src/client/ui-tweaks/appicons.ts +24 -0
  289. package/src/client/ui-tweaks/archive.tsx +281 -0
  290. package/src/client/ui-tweaks/branding.tsx +232 -0
  291. package/src/client/ui-tweaks/cachehit.tsx +122 -0
  292. package/src/client/ui-tweaks/gitbar.tsx +2559 -0
  293. package/src/client/ui-tweaks/index.tsx +1696 -0
  294. package/src/client/ui-tweaks/mcp.tsx +582 -0
  295. package/src/client/ui-tweaks/notifier.ts +514 -0
  296. package/src/client/ui-tweaks/whale.tsx +171 -0
  297. package/src/client/upload.ts +187 -0
  298. package/src/client/useChatcodeAccount.ts +103 -0
  299. package/src/client/wco.ts +120 -0
  300. package/src/codingplan.ts +146 -0
  301. package/src/config.ts +207 -0
  302. package/src/context-types.ts +559 -0
  303. package/src/fs-operations.ts +97 -0
  304. package/src/fs-search.ts +113 -0
  305. package/src/fs-tree.ts +158 -0
  306. package/src/git.ts +446 -0
  307. package/src/html-route.ts +106 -0
  308. package/src/index.ts +1524 -0
  309. package/src/invariant.ts +32 -0
  310. package/src/login-route.ts +26 -0
  311. package/src/open-external.ts +90 -0
  312. package/src/path-security.ts +81 -0
  313. package/src/prefs-shared.ts +303 -0
  314. package/src/pty-deps.ts +241 -0
  315. package/src/pty-manager.ts +376 -0
  316. package/src/tools.ts +482 -0
  317. package/src/trust-fence.ts +84 -0
  318. package/src/ui-tweaks/archive.ts +293 -0
  319. package/src/ui-tweaks/config.ts +257 -0
  320. package/src/ui-tweaks/git-web.ts +421 -0
  321. package/src/ui-tweaks/git.ts +1524 -0
  322. package/src/ui-tweaks/index.ts +61 -0
  323. package/src/ui-tweaks/mcp.ts +535 -0
  324. package/src/ui-tweaks/turn-outcome.ts +105 -0
  325. package/src/ui-tweaks/web.ts +225 -0
  326. package/src/wire.ts +110 -0
  327. package/vendor/addon-fit.js +2 -0
  328. package/vendor/xterm.css +218 -0
  329. 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,6 @@
1
+ import { type SessionScope } from './api.ts';
2
+ export declare function PdfView(props: {
3
+ scope: SessionScope;
4
+ path: string;
5
+ title: string;
6
+ }): import("react").JSX.Element;
@@ -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;