@lyhue1991/dsh-soup 0.4.10 → 0.4.11

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 (3) hide show
  1. package/README.md +2 -2
  2. package/lib/client.js +33 -27
  3. package/package.json +2 -2
package/README.md CHANGED
@@ -32,7 +32,7 @@ DSH(DeepSeek Harness)功能很强:会话、工具、轨迹、Goal 一应
32
32
 
33
33
  ### 🧅 右侧文件树(主打 · 葱 · 提鲜点缀)
34
34
 
35
- 一个真正和左侧工作区并列的文件浏览器——不悬浮、不遮挡,配色与宽度都与左侧一致(默认 280px,拖左缘在 264–420px 间调整)。
35
+ 一个真正和左侧工作区并列的文件浏览器——不悬浮、不遮挡,配色与宽度都与左侧一致(默认 360px,拖左缘在 300–520px 间调整)。
36
36
 
37
37
  - **跟随会话**:自动展示当前会话的工作目录,切会话/工作区时跟着走。
38
38
  - **右键菜单**:预览、用系统打开、重命名、移到废纸篓、复制完整路径、下载到本机。
@@ -97,7 +97,7 @@ dsh plugin add @lyhue1991/dsh-soup
97
97
 
98
98
  ## 更新日志
99
99
 
100
- - **0.4.x** — Seti 图标字体(60 种字形覆盖 122 种扩展名)+ 空会话预览浮层(最大化/还原)+ 微信文章兼容 + 文本上限 8 MB + 关闭按钮尺寸修复 + 预览路径 rtl 修复 + i18n 语言适配 + 预览纯阅读模式 + 内部分区重排。
100
+ - **0.4.x** — Seti 图标字体(60 种字形覆盖 122 种扩展名)+ 空会话预览浮层(最大化/还原)+ 微信文章兼容 + 文本上限 8 MB + 关闭按钮尺寸修复 + 预览路径 rtl 修复 + i18n 语言适配 + 预览纯阅读模式 + 内部分区重排 + 预览头部冻结 + details 宽度对齐宿主合同。
101
101
  - **0.3.x** — Markdown 相对路径图片内联渲染 + 自动刷新(3s mtime 探测 + 指数退避)+ JupyterLab 风格工具栏图标。
102
102
  - **0.2.0** — 改名 `dsh-tree` → `dsh-soup`。
103
103
  - **0.1.x** — 只读文件预览系统(md/html/json/csv/pdf/notebook/图片/代码高亮)、大文件流式下载、多行 GoalBar、模型吞吐徽标、空白新会话入口、跨平台 node:fs 文件核心。
package/lib/client.js CHANGED
@@ -4,7 +4,7 @@
4
4
  * 布局:注册进 shell 原生的 `details` 右列(并列网格,非悬浮),
5
5
  * 有 Session log 时在它右侧放 📁;空白新会话则在输入框上方、
6
6
  * workspace/preset 控件行的右端提供同一入口。
7
- * 宽度与左侧工作区一致:默认 280px、可拖 264–420px(直接改写 shell 网格
7
+ * 宽度对齐宿主 details 合同:默认 360px、可拖 300–520px(直接改写 shell 网格
8
8
  * 的 details 轨,并用 MutationObserver 在 shell 重渲染后维持宽度)。
9
9
  *
10
10
  * 与宿主通信:走同源 HTTP 路由 `/api/dsh-soup`(POST JSON),
@@ -151,6 +151,7 @@ window.__ModuleLoader__.load({
151
151
  // 纯预览(无编辑):markdown/html/json/csv 各有专属渲染器。
152
152
  var FILEVIEW_CSS =
153
153
  '.dfv-root{display:flex;flex-direction:column;height:100%;min-height:0;background:var(--dsw-specific-sidebar-fill);color:var(--dsw-alias-label-primary);font-family:var(--dsw-font-family);user-select:text;-webkit-user-select:text;}' +
154
+ '.dfv-header{position:sticky;top:0;z-index:2;flex:none;background:var(--dsw-specific-sidebar-fill);}' +
154
155
  '.dfv-tabbar{display:flex;align-items:center;gap:2px;flex:none;overflow-x:auto;padding:6px 10px 0;border-bottom:1px solid var(--dsw-alias-border-l1);scrollbar-width:none;}' +
155
156
  '.dfv-tabbar::-webkit-scrollbar{display:none;}' +
156
157
  '.dfv-tab{display:inline-flex;align-items:center;gap:5px;padding:5px 8px 5px 10px;border:none;border-radius:8px 8px 0 0;background:transparent;color:var(--dsw-alias-label-secondary);font-size:12px;line-height:1.4;cursor:pointer;white-space:nowrap;max-width:220px;}' +
@@ -439,9 +440,9 @@ window.__ModuleLoader__.load({
439
440
  var uploadInputEl = null
440
441
  var layout = null
441
442
 
442
- var DETAILS_MIN = 264
443
- var DETAILS_MAX = 420
444
- var DETAILS_DEFAULT = 280
443
+ var DETAILS_MIN = 300
444
+ var DETAILS_MAX = 520
445
+ var DETAILS_DEFAULT = 360
445
446
  function clampW(w) { return Math.max(DETAILS_MIN, Math.min(DETAILS_MAX, w)) }
446
447
 
447
448
  function pathJoin(dir, name) { return String(dir || '/').replace(/\/+$/, '') + '/' + name }
@@ -1492,8 +1493,9 @@ window.__ModuleLoader__.load({
1492
1493
  if (isNaN(last) || last <= 1) { setState({ open: false }); return }
1493
1494
  setState({ open: true })
1494
1495
  if (Math.round(last) !== Math.round(widthRef.current)) {
1495
- parts[parts.length - 1] = Math.round(widthRef.current) + 'px'
1496
- frame.style.gridTemplateColumns = parts.join(' ')
1496
+ // 宿主是宽度偏好的权威(/native drag/窗口求解都可能改它)。
1497
+ // 插件只同步基准,不能把宿主拖出来的宽度强行拉回旧默认。
1498
+ widthRef.current = last
1497
1499
  }
1498
1500
  } catch (e) {}
1499
1501
  }
@@ -2477,6 +2479,7 @@ window.__ModuleLoader__.load({
2477
2479
  )
2478
2480
  })
2479
2481
 
2482
+ var toolbar = null
2480
2483
  var body = null
2481
2484
  if (!active) {
2482
2485
  body = create('div', { className: 'dfv-empty' },
@@ -2484,33 +2487,36 @@ window.__ModuleLoader__.load({
2484
2487
  T('files.emptyHint'),
2485
2488
  )
2486
2489
  } else {
2490
+ toolbar = create('div', { className: 'dfv-toolbar' },
2491
+ create('span', { className: 'dfv-toolbar-path', title: active.path }, active.path),
2492
+ typeof active.size === 'number' && active.size > 0 ? create('span', null, formatBytes(active.size)) : null,
2493
+ active.loaded ? create('button', {
2494
+ type: 'button',
2495
+ className: 'dfv-btn',
2496
+ title: T('files.reloadTitle'),
2497
+ onClick: function () { reloadFile(active.path) },
2498
+ },
2499
+ create('span', { className: 'expl-icon', dangerouslySetInnerHTML: { __html: ICON_REFRESH } }),
2500
+ T('files.reload'),
2501
+ ) : null,
2502
+ create('button', {
2503
+ type: 'button',
2504
+ className: 'dfv-btn',
2505
+ title: '最大化', 'aria-label': '最大化',
2506
+ onClick: function () { setFiles({ overlay: true, overlayMax: true, overlayReturn: 'tab' }) },
2507
+ dangerouslySetInnerHTML: { __html: EXPAND_SVG },
2508
+ }),
2509
+ )
2487
2510
  body = create('div', { className: 'dfv-body' },
2488
- create('div', { className: 'dfv-toolbar' },
2489
- create('span', { className: 'dfv-toolbar-path', title: active.path }, active.path),
2490
- typeof active.size === 'number' && active.size > 0 ? create('span', null, formatBytes(active.size)) : null,
2491
- active.loaded ? create('button', {
2492
- type: 'button',
2493
- className: 'dfv-btn',
2494
- title: T('files.reloadTitle'),
2495
- onClick: function () { reloadFile(active.path) },
2496
- },
2497
- create('span', { className: 'expl-icon', dangerouslySetInnerHTML: { __html: ICON_REFRESH } }),
2498
- T('files.reload'),
2499
- ) : null,
2500
- create('button', {
2501
- type: 'button',
2502
- className: 'dfv-btn',
2503
- title: '最大化', 'aria-label': '最大化',
2504
- onClick: function () { setFiles({ overlay: true, overlayMax: true, overlayReturn: 'tab' }) },
2505
- dangerouslySetInnerHTML: { __html: EXPAND_SVG },
2506
- }),
2507
- ),
2508
2511
  create(FileContent, { key: active.path, entry: active }),
2509
2512
  )
2510
2513
  }
2511
2514
 
2512
2515
  return create('div', { className: 'dfv-root', ref: rootRef },
2513
- files.list.length > 0 ? create('div', { className: 'dfv-tabbar' }, tabs) : null,
2516
+ files.list.length > 0 ? create('div', { className: 'dfv-header' },
2517
+ create('div', { className: 'dfv-tabbar' }, tabs),
2518
+ toolbar,
2519
+ ) : null,
2514
2520
  body,
2515
2521
  )
2516
2522
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@lyhue1991/dsh-soup",
3
- "description": "DSH 项目资源管理器:右侧 details 列文件树(并列网格、宽度与左侧工作区一致 264-420px),有 Session log 时在其右侧、空白新会话在输入框上方右端提供 📁 切换按钮;支持多选、双击展开/打开、右键菜单(打开/系统打开/重命名/废纸篓/新建/复制路径)、拖拽移动、上传。文件「打开」在会话区新增「文件」标签页(原生 conversation.view,与对话/轨迹同级):文本可编辑 ⌘S 保存、图片预览、二进制提示。附带模型吞吐徽标:输入框正上方显示「正在等待模型...」与彩色 t/s 徽标(数据来自 llm/stream 真实流)。附带 GoalBar 多行展示:把原生单行截断 GoalBar 放开为多行完整显示,编辑用 textarea,工具与数据仍走原生 goal。",
4
- "version": "0.4.10",
3
+ "description": "DSH 项目资源管理器:右侧 details 列文件树(并列网格、宽度对齐宿主 details 合同 300-520px),有 Session log 时在其右侧、空白新会话在输入框上方右端提供 📁 切换按钮;支持多选、双击展开/打开、右键菜单(打开/系统打开/重命名/废纸篓/新建/复制路径)、拖拽移动、上传。文件「打开」在会话区新增「文件」标签页(原生 conversation.view,与对话/轨迹同级):文本可编辑 ⌘S 保存、图片预览、二进制提示。附带模型吞吐徽标:输入框正上方显示「正在等待模型...」与彩色 t/s 徽标(数据来自 llm/stream 真实流)。附带 GoalBar 多行展示:把原生单行截断 GoalBar 放开为多行完整显示,编辑用 textarea,工具与数据仍走原生 goal。",
4
+ "version": "0.4.11",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
7
7
  "exports": {