@keith9681/dsh-sidebar 0.15.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +0 -0
- package/README_EN.md +0 -0
- package/cordis.patch.yml +49 -0
- package/lib/client-editor.js +34651 -0
- package/lib/client-mermaid.js +200629 -0
- package/lib/client-registry.js +13388 -0
- package/lib/client-terminal.js +8904 -0
- package/lib/client.js +13388 -0
- package/lib/index.js +3959 -0
- package/lib/invariant.js +22 -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/client/BrowserView.d.ts +22 -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 +12 -0
- package/lib/types/client/FileTree.d.ts +36 -0
- package/lib/types/client/GitView.d.ts +8 -0
- package/lib/types/client/OrphanedTab.d.ts +11 -0
- package/lib/types/client/PdfView.d.ts +6 -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/SideChatView.d.ts +16 -0
- package/lib/types/client/Sidebar.d.ts +6 -0
- package/lib/types/client/SubagentView.d.ts +16 -0
- package/lib/types/client/TabBar.d.ts +43 -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 +23 -0
- package/lib/types/client/UploadOverlay.d.ts +20 -0
- package/lib/types/client/add-plugin-modal.d.ts +15 -0
- package/lib/types/client/api.d.ts +268 -0
- package/lib/types/client/binary-download.d.ts +12 -0
- package/lib/types/client/breakpoints.d.ts +12 -0
- package/lib/types/client/browser.d.ts +50 -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/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/editable-state.d.ts +27 -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 +57 -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 +33 -0
- package/lib/types/client/lang.d.ts +12 -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.d.ts +366 -0
- package/lib/types/client/mermaid-blocks.d.ts +41 -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 +41 -0
- package/lib/types/client/paths.d.ts +35 -0
- package/lib/types/client/pdf-types.d.ts +2 -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 +23 -0
- package/lib/types/client/selection-payload.d.ts +27 -0
- package/lib/types/client/service.d.ts +440 -0
- package/lib/types/client/settings-nav-icon.d.ts +19 -0
- package/lib/types/client/shell-presets.d.ts +48 -0
- package/lib/types/client/sidechat-transcript.d.ts +103 -0
- package/lib/types/client/split-pane.d.ts +30 -0
- package/lib/types/client/state.d.ts +359 -0
- package/lib/types/client/subagent-detect.d.ts +54 -0
- package/lib/types/client/subagent-jobs.d.ts +63 -0
- package/lib/types/client/tab-content-memo.d.ts +33 -0
- package/lib/types/client/terminal-font.d.ts +20 -0
- package/lib/types/client/theme.d.ts +45 -0
- package/lib/types/client/titlebar-strip.d.ts +23 -0
- package/lib/types/client/upload.d.ts +69 -0
- package/lib/types/client/wco.d.ts +47 -0
- package/lib/types/config.d.ts +64 -0
- package/lib/types/context-types.d.ts +603 -0
- package/lib/types/fs-operations.d.ts +28 -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 +82 -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/jobs-routes.d.ts +45 -0
- package/lib/types/open-external.d.ts +24 -0
- package/lib/types/prefs-shared.d.ts +225 -0
- package/lib/types/pty-deps.d.ts +78 -0
- package/lib/types/pty-manager.d.ts +168 -0
- package/lib/types/sidechat-core.d.ts +172 -0
- package/lib/types/sidechat-routes.d.ts +30 -0
- package/lib/types/subagent-activity.d.ts +44 -0
- package/lib/types/subagent-live-route.d.ts +44 -0
- package/lib/types/tools.d.ts +31 -0
- package/lib/types/trust-fence.d.ts +24 -0
- package/lib/types/wire.d.ts +38 -0
- package/package.json +173 -0
- package/scripts/install.ps1 +289 -0
- package/scripts/install.sh +287 -0
- package/src/agent-pty.ts +527 -0
- package/src/browser-probe.ts +26 -0
- package/src/bundle-route.ts +129 -0
- package/src/client/BrowserView.tsx +253 -0
- package/src/client/DiffTab.tsx +110 -0
- package/src/client/DiffView.tsx +305 -0
- package/src/client/EditorHost.tsx +525 -0
- package/src/client/FileTree.tsx +653 -0
- package/src/client/GitView.tsx +558 -0
- package/src/client/OrphanedTab.tsx +27 -0
- package/src/client/PdfView.tsx +110 -0
- package/src/client/RenderBoundary.tsx +49 -0
- package/src/client/SandboxStatusBar.tsx +60 -0
- package/src/client/SideCardSection.module.css +960 -0
- package/src/client/SideCardSection.tsx +1152 -0
- package/src/client/SideChatView.module.css +437 -0
- package/src/client/SideChatView.tsx +644 -0
- package/src/client/Sidebar.tsx +1148 -0
- package/src/client/SubagentView.module.css +547 -0
- package/src/client/SubagentView.tsx +883 -0
- package/src/client/TabBar.tsx +305 -0
- package/src/client/TerminalView.tsx +383 -0
- package/src/client/TextEditor.tsx +500 -0
- package/src/client/TreePanel.tsx +273 -0
- package/src/client/UploadOverlay.tsx +62 -0
- package/src/client/add-plugin-modal.tsx +199 -0
- package/src/client/api.ts +335 -0
- package/src/client/binary-download.tsx +23 -0
- package/src/client/breakpoints.ts +51 -0
- package/src/client/browser.ts +119 -0
- package/src/client/builtins/index.ts +37 -0
- package/src/client/builtins/tabs.tsx +331 -0
- package/src/client/builtins/viewers.tsx +125 -0
- package/src/client/chunk-loader.ts +351 -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/editable-state.ts +70 -0
- package/src/client/editor-load.ts +92 -0
- package/src/client/frame-batcher.ts +56 -0
- package/src/client/icons.tsx +161 -0
- package/src/client/image-types.ts +8 -0
- package/src/client/ime-guard.ts +47 -0
- package/src/client/index.tsx +369 -0
- package/src/client/intercept.tsx +110 -0
- package/src/client/lang.ts +103 -0
- package/src/client/layout.css +94 -0
- package/src/client/lazy-chunk.tsx +89 -0
- package/src/client/link-intercept.ts +73 -0
- package/src/client/locales.ts +734 -0
- package/src/client/mermaid-blocks.ts +110 -0
- package/src/client/mermaid-sanitize.ts +93 -0
- package/src/client/mermaid.tsx +401 -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 +62 -0
- package/src/client/paths.ts +47 -0
- package/src/client/pdf-types.ts +4 -0
- package/src/client/plugin-settings.ts +43 -0
- package/src/client/plugins-shared.ts +29 -0
- package/src/client/plugins-tabs.ts +87 -0
- package/src/client/plugins-viewers.ts +30 -0
- package/src/client/prefs.ts +207 -0
- package/src/client/produced-files.ts +91 -0
- package/src/client/selection-payload.ts +86 -0
- package/src/client/service.ts +838 -0
- package/src/client/settings-nav-icon.ts +45 -0
- package/src/client/shell-presets.ts +83 -0
- package/src/client/sidebar.module.css +2577 -0
- package/src/client/sidechat-transcript.ts +321 -0
- package/src/client/split-pane.tsx +322 -0
- package/src/client/state.ts +1175 -0
- package/src/client/subagent-detect.ts +137 -0
- package/src/client/subagent-jobs.ts +161 -0
- package/src/client/tab-content-memo.ts +46 -0
- package/src/client/terminal-font.ts +28 -0
- package/src/client/theme.ts +110 -0
- package/src/client/titlebar-strip.ts +37 -0
- package/src/client/upload.ts +187 -0
- package/src/client/wco.ts +120 -0
- package/src/config.ts +155 -0
- package/src/context-types.ts +610 -0
- package/src/fs-operations.ts +99 -0
- package/src/fs-search.ts +86 -0
- package/src/fs-tree.ts +158 -0
- package/src/git.ts +244 -0
- package/src/html-route.ts +106 -0
- package/src/index.ts +1132 -0
- package/src/invariant.ts +32 -0
- package/src/jobs-routes.ts +257 -0
- package/src/open-external.ts +90 -0
- package/src/prefs-shared.ts +268 -0
- package/src/pty-deps.ts +240 -0
- package/src/pty-manager.ts +376 -0
- package/src/sidechat-core.ts +468 -0
- package/src/sidechat-routes.ts +344 -0
- package/src/subagent-activity.ts +91 -0
- package/src/subagent-live-route.ts +93 -0
- package/src/tools.ts +479 -0
- package/src/trust-fence.ts +77 -0
- package/src/wire.ts +100 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure URL vocabulary of the /sidebar/html route (HTML previewer).
|
|
3
|
+
*
|
|
4
|
+
* Why path-encoded parameters instead of a query string: the previewed
|
|
5
|
+
* page resolves its relative assets (./style.css, img/x.png) against the
|
|
6
|
+
* document URL, and the WHATWG URL algorithm DROPS the query of a
|
|
7
|
+
* path-relative reference — `/sidebar/html?a=1&path=/a/b/` + `./style.css`
|
|
8
|
+
* would lose the session scope and the route would reject the asset.
|
|
9
|
+
* Encoding everything into the URL path keeps relative resolution inside
|
|
10
|
+
* the same route with every request self-contained:
|
|
11
|
+
*
|
|
12
|
+
* /sidebar/html/<sessionId>/<absolute-path segments, encodeURIComponent'd>
|
|
13
|
+
* /sidebar/html/S/Users/me/proj/index.html
|
|
14
|
+
* + ./style.css → /sidebar/html/S/Users/me/proj/style.css
|
|
15
|
+
* Windows: C:\Users\me\a.html → /sidebar/html/S/C%3A/Users/me/a.html
|
|
16
|
+
* UNC (\\server\share\... or //server/share/...):
|
|
17
|
+
* → /sidebar/html/S//server/share/proj/a.html ('//' right after the
|
|
18
|
+
* sessionId marks the UNC prefix; the WHATWG URL keeps '//' intact so
|
|
19
|
+
* relative assets still resolve inside the same route)
|
|
20
|
+
*
|
|
21
|
+
* The decoder rebuilds the marker as a forward-slash `//server/share/...`
|
|
22
|
+
* path. That form is intentionally platform-neutral: `node:path` resolves it
|
|
23
|
+
* to `\\server\share\...` on win32 and `/server/share/...` on POSIX, so the
|
|
24
|
+
* host's existing requireAbsolute + isWithin fence needs no platform signal
|
|
25
|
+
* (a leading `//` is a legal POSIX absolute path, so no data is lost on
|
|
26
|
+
* either platform).
|
|
27
|
+
*
|
|
28
|
+
* This module is intentionally dependency-free (no node imports, no wire
|
|
29
|
+
* helpers) so the client bundle can import `encodeHtmlUrl` without tripping
|
|
30
|
+
* the build-time purity gate; the host converts decode failures into
|
|
31
|
+
* SidebarError responses at the route boundary.
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
/** One decoded route reference. */
|
|
35
|
+
export interface HtmlRouteRef {
|
|
36
|
+
sessionId: string
|
|
37
|
+
/** Absolute file path (leading slash; Windows drives keep their colon). */
|
|
38
|
+
path: string
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/** Decode outcome: the reference, or a client-error description. */
|
|
42
|
+
export type HtmlDecodeResult =
|
|
43
|
+
| { ok: true; ref: HtmlRouteRef }
|
|
44
|
+
| { ok: false; status: 400 | 404; message: string }
|
|
45
|
+
|
|
46
|
+
/** The route prefix both encoders/decoders agree on. */
|
|
47
|
+
export const HTML_ROUTE_PREFIX = '/sidebar/html/'
|
|
48
|
+
|
|
49
|
+
/** Build the route URL for one absolute file path (client + tests). */
|
|
50
|
+
export function encodeHtmlUrl(sessionId: string, path: string): string {
|
|
51
|
+
const unc = /^[\\/]{2}[^\\/]/.test(path)
|
|
52
|
+
const segments = path.split(/[\\/]+/).filter(segment => segment !== '')
|
|
53
|
+
return `${HTML_ROUTE_PREFIX}${encodeURIComponent(sessionId)}/${unc ? '/' : ''}${segments.map(encodeURIComponent).join('/')}`
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Decode a route pathname into the session + absolute file path. Rejects
|
|
58
|
+
* a wrong prefix (404), an empty path, malformed percent encoding, and a
|
|
59
|
+
* missing sessionId or file path (400). The caller still must bound the
|
|
60
|
+
* decoded path with requireAbsolute + isWithin(cwd) — a decoded `..`
|
|
61
|
+
* segment resolves outside the cwd and is refused there.
|
|
62
|
+
*/
|
|
63
|
+
export function decodeHtmlUrl(pathname: string): HtmlDecodeResult {
|
|
64
|
+
if (!pathname.startsWith(HTML_ROUTE_PREFIX)) {
|
|
65
|
+
return { ok: false, status: 404, message: 'not an html route' }
|
|
66
|
+
}
|
|
67
|
+
const rest = pathname.slice(HTML_ROUTE_PREFIX.length)
|
|
68
|
+
if (rest === '') {
|
|
69
|
+
return { ok: false, status: 400, message: 'invalid html route path' }
|
|
70
|
+
}
|
|
71
|
+
let segments: string[]
|
|
72
|
+
try {
|
|
73
|
+
segments = rest.split('/').map(segment => decodeURIComponent(segment))
|
|
74
|
+
} catch {
|
|
75
|
+
return { ok: false, status: 400, message: 'malformed URL encoding' }
|
|
76
|
+
}
|
|
77
|
+
const [sessionId, ...pathSegments] = segments
|
|
78
|
+
if (sessionId === undefined || sessionId === '') {
|
|
79
|
+
return { ok: false, status: 400, message: 'sessionId and file path are required' }
|
|
80
|
+
}
|
|
81
|
+
// An empty FIRST path segment is the UNC marker (encodeHtmlUrl emits
|
|
82
|
+
// '<sid>//server/share/...' for UNC paths); the encoder filters empty
|
|
83
|
+
// segments everywhere else, so an empty segment can only be the marker or
|
|
84
|
+
// a malformed URL — both handled here.
|
|
85
|
+
const unc = pathSegments[0] === ''
|
|
86
|
+
const tail = unc ? pathSegments.slice(1) : pathSegments
|
|
87
|
+
if (tail.length === 0 || tail.some(segment => segment === '')) {
|
|
88
|
+
return { ok: false, status: 400, message: 'sessionId and file path are required' }
|
|
89
|
+
}
|
|
90
|
+
let path: string
|
|
91
|
+
if (unc) {
|
|
92
|
+
// Rebuild the platform-neutral forward-slash form `//server/share/...`;
|
|
93
|
+
// requireAbsolute() resolves it to the platform's own UNC/POSIX spelling.
|
|
94
|
+
path = `//${tail.join('/')}`
|
|
95
|
+
} else if (/^[A-Za-z]:$/.test(tail[0] ?? '')) {
|
|
96
|
+
// A Windows drive segment ('D:') is the FIRST path segment of an encoded
|
|
97
|
+
// drive path. Rejoining it with a leading slash would yield '/D:/work/...'
|
|
98
|
+
// which node's path.resolve() mangles into 'D:\D:\work\...' on Windows —
|
|
99
|
+
// the html route's isWithin(cwd) fence would then reject every drive path.
|
|
100
|
+
// Keep the drive form slash-free so requireAbsolute() resolves it verbatim.
|
|
101
|
+
path = tail.join('/')
|
|
102
|
+
} else {
|
|
103
|
+
path = `/${tail.join('/')}`
|
|
104
|
+
}
|
|
105
|
+
return { ok: true, ref: { sessionId, path } }
|
|
106
|
+
}
|