dsh-linked-workspace 0.6.2 → 0.8.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/CHANGELOG.md +15 -0
- package/README.en.md +11 -3
- package/README.md +7 -3
- package/docs/API.md +8 -3
- package/docs/VERIFY.md +22 -8
- package/lib/client.js +719 -61
- package/lib/index.js +241 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.8.0 — 2026-11-09
|
|
4
|
+
|
|
5
|
+
- **Image previews**: PNG/JPG/GIF/WebP/BMP/ICO/AVIF/SVG now render in the content panel for both remote and local files (`media.read` / `local.media`, 24 MB cap).
|
|
6
|
+
- **CSV/TSV table view**: CSV and TSV files open in a table by default with a Table/Source toggle. The source view keeps editing, syntax highlighting, and save; tables are capped at 1000 rows and 80 columns.
|
|
7
|
+
- **Move files and folders**: the directory context menu gains "Move to…" for remote and local entries. A directory picker chooses the destination inside the same tree; the plugin rejects collisions, moving a folder into itself, moving the workspace root, and moving a file with unsaved edits.
|
|
8
|
+
- New host APIs `media.read`, `fs.move`, `local.media`, `local.move`; `FS_EXISTS` now maps to HTTP 409.
|
|
9
|
+
|
|
10
|
+
## 0.7.0 — 2026-11-09
|
|
11
|
+
|
|
12
|
+
- **VSCode-like tree interaction**: single-click a folder to expand/collapse and single-click a file to open it. A single-click preview tab is replaced by the next file; double-click pins the tab so later single clicks do not overwrite it. Double-clicking a folder keeps it expanded.
|
|
13
|
+
- **Terminal shortcuts in the directory toolbar**: one button opens a system terminal at the current remote directory (via `ssh`), and linked workspaces get a second button for the local directory.
|
|
14
|
+
- **Keyboard shortcuts**: `Ctrl/Cmd+S` save, `Ctrl/Cmd+W` close tab, `Ctrl+Tab` / `Shift+Ctrl+Tab` cycle tabs, `Ctrl/Cmd+B` toggle the directory panel, `Ctrl/Cmd+Shift+F` file search.
|
|
15
|
+
- **Unsaved-close prompt**: closing a dirty tab now offers Save / Discard / Cancel instead of silently losing edits.
|
|
16
|
+
- **Auto save setting**: Settings → Connections → Editor behavior adds an auto-save switch; when enabled, edits are saved about one second after typing stops. Default remains off.
|
|
17
|
+
|
|
3
18
|
## 0.6.2 — 2026-11-05
|
|
4
19
|
|
|
5
20
|
- Fixed Markdown/document JSON transport failing with a Windows GBK codec error for characters such as the superscript minus (U+207B); the Python bridge now emits UTF-8/ASCII-safe JSON and configures UTF-8 stdout.
|
package/README.en.md
CHANGED
|
@@ -49,18 +49,22 @@ The content panel now edits **Markdown / PDF / DOCX / XLSX / PPTX** files on bot
|
|
|
49
49
|
### Right-sidebar linked-workspace directory
|
|
50
50
|
|
|
51
51
|
- The directory is a fixed panel at the far right of the sidebar: **remote tree on top, local tree below**, both rooted at “All files”. Plugin internals (`.local`/`.remote`) are hidden by default but can be shown with the hidden-files toggle.
|
|
52
|
-
- **Single click
|
|
52
|
+
- **Single click opens, double click pins**: clicking a folder expands/collapses it immediately; clicking a file opens it in the content panel, and clicking another file replaces the current unpinned preview tab. Double-click a file to pin its tab so later single clicks do not replace it; double-clicking a folder only keeps it expanded.
|
|
53
53
|
- **Layout**: conversation → content panel (internal file tabs) → directory panel. The content panel shows “Open a file / Select a file from the workspace directory tree” when nothing is open. A toolbar button shows/hides the directory panel.
|
|
54
54
|
- Toolbar:
|
|
55
55
|
- **Tree switch**: all files / changed files / all changes (git status from remote and local sides).
|
|
56
56
|
- **Search in files**: at least two characters; remote uses `find`, local walks the tree. Results are grouped by remote/local.
|
|
57
57
|
- **Open options menu**: editor / system default app / copy path.
|
|
58
|
+
- **Open terminal**: the remote button in the remote tree toolbar opens the system terminal and SSHes into the current remote directory; linked workspaces also show a local button that opens a terminal in the local directory. The remote terminal uses the system `ssh` client, so it may ask for a password or host-key confirmation.
|
|
58
59
|
- **Transfer**: bidirectional. Select a remote file/folder to copy it into the local `.remote/` folder; select a local file/folder to copy it to the corresponding relative remote path. Jobs run one at a time through a queue.
|
|
59
60
|
- **Show/hide hidden files**: applies to both trees.
|
|
60
61
|
- **Refresh**: reload roots, git status and search.
|
|
61
62
|
- File-type icons for JS/TS/Python/JSON/Markdown/Shell/YAML/images/archives/config files, etc.
|
|
62
63
|
- Editor: line numbers, syntax highlighting (layered rendering), theme colors, `Ctrl/Cmd+S` save, conflict prompt (reload/force save), read-only protection for binary and >2 MB files, UTF-8/LF/CRLF/line-count status bar. The embedded content panel hides the path/save header; unsaved changes show a gray dot in the file tab. Read-only tabs render the file content but cannot be edited or saved.
|
|
63
|
-
-
|
|
64
|
+
- **Image and CSV preview**: PNG/JPG/GIF/WebP/BMP/ICO/AVIF/SVG render directly in the content panel (up to 24 MB). CSV/TSV opens as a table by default with a Table/Source toggle; the source view remains editable and saveable. Tables are capped at 1000 rows and 80 columns.
|
|
65
|
+
- **Shortcuts**: `Ctrl/Cmd+S` saves the current file; `Ctrl/Cmd+W` closes the current tab (with a save/discard/cancel prompt when dirty); `Ctrl+Tab` / `Shift+Ctrl+Tab` cycles tabs; `Ctrl/Cmd+B` toggles the directory panel; `Ctrl/Cmd+Shift+F` opens file search.
|
|
66
|
+
- **Auto save**: enable it under Settings → Connections → Editor behavior. It saves about one second after you stop typing. When off, use `Ctrl+S`. Closing a dirty file always asks first instead of discarding silently.
|
|
67
|
+
- Multiple files can be open at once (up to 12 slots). A single click opens a preview tab and replaces the current unpinned preview; double-click pins the tab; clicking the same file focuses its existing tab. Local files use the same internal editor and can be edited and saved.
|
|
64
68
|
|
|
65
69
|
### Running indicator and local skills
|
|
66
70
|
|
|
@@ -69,7 +73,7 @@ The content panel now edits **Markdown / PDF / DOCX / XLSX / PPTX** files on bot
|
|
|
69
73
|
|
|
70
74
|
### Context menu (files, folders, roots)
|
|
71
75
|
|
|
72
|
-
Transfer (download to `.remote` / upload to remote), download to the default folder, queue, open, edit with Notepad, copy, paste, copy path, rename, delete, change permissions, new folder/file, properties. Remote operations use SFTP; local operations use the local filesystem. The transfer queue runs one job at a time.
|
|
76
|
+
Transfer (download to `.remote` / upload to remote), download to the default folder, queue, open, edit with Notepad, copy, paste, copy path, **Move to…** (only within the same local or remote tree), rename, delete, change permissions, new folder/file, properties. Remote operations use SFTP; local operations use the local filesystem. The transfer queue runs one job at a time.
|
|
73
77
|
|
|
74
78
|
### Linked-workspace layout
|
|
75
79
|
|
|
@@ -115,6 +119,10 @@ Old “Remote directories” tabs are restored after refresh through hidden lega
|
|
|
115
119
|
|
|
116
120
|
See [CHANGELOG.md](CHANGELOG.md) for the full version history.
|
|
117
121
|
|
|
122
|
+
### 0.7.0
|
|
123
|
+
|
|
124
|
+
Single-click tree navigation with preview tabs and double-click pinning, remote/local terminal buttons with `cd`, VSCode-like shortcuts, unsaved-close prompts, and an auto-save switch under Settings → Connections.
|
|
125
|
+
|
|
118
126
|
### 0.6.2
|
|
119
127
|
|
|
120
128
|
Fix Windows GBK JSON transport errors for Markdown characters such as the superscript minus; PDF pages now load lazily and the source PDF is cached, avoiding long loading hangs on large files.
|
package/README.md
CHANGED
|
@@ -50,18 +50,22 @@
|
|
|
50
50
|
### 右侧栏「联动工作区目录」
|
|
51
51
|
|
|
52
52
|
- 面板固定在右侧栏最右边:**上方远程目录树,下方本地目录树**,两棵树根部都显示「所有文件」;本地树自动隐藏插件的 `.local`/`.remote` 内部目录。
|
|
53
|
-
-
|
|
53
|
+
- **单击打开,双击固定**:单击文件夹立即展开/折叠;单击文件直接在文件内容面板打开,再次单击其他文件会替换当前未固定的预览标签。双击文件可固定该标签,之后单击其他文件不会覆盖它;双击文件夹只保持展开。目录面板固定在最右侧,始终可见。
|
|
54
54
|
- **面板布局**:目录树是右侧固定面板(带工具栏按钮开/关,不再是标签页);会话面板与目录面板之间是文件内容面板,没有打开文件时显示「打开文件 / 从工作区目录树中选择文件」占位。
|
|
55
55
|
- 工具栏(右键栏右上角):
|
|
56
56
|
- **切换文件树**:所有文件 / 已更改的文件 / 所有更改。更改列表来自远端与本地的 `git status`(分支、状态、暂存标记;删除项置灰)。
|
|
57
57
|
- **在文件中搜索**:搜索框输入 ≥2 个字符后,远端用 `find`、本地用目录遍历按文件名过滤,结果分「远程目录 / 本地目录」列出。
|
|
58
58
|
- **打开选项菜单**:编辑器 / 系统默认应用(把远端文件下载到临时目录后交给本机应用打开)/ 复制路径。
|
|
59
59
|
- **传输按钮(双向)**:选中远端文件/文件夹时传输到本地 `.remote`;选中本地文件/文件夹时传输到远端对应相对路径(进入传输队列,一次一个任务并显示状态)。
|
|
60
|
+
- **打开终端**:远程按钮位于远程目录树右上角,打开本机终端并用系统 `ssh` 直接进入当前远程目录;联动工作区还会显示本地按钮,直接打开本地目录。远程终端首次连接可能需要确认主机指纹或输入密码。
|
|
60
61
|
- **显示/隐藏隐藏文件**:同时约束远程目录和本地目录;打开目录时默认显示隐藏项(包括 `.local`/`.remote`),可用按钮隐藏。
|
|
61
62
|
- **刷新**:重新拉取根目录、git 状态与搜索。
|
|
62
63
|
- 不同文件类型使用不同彩色图标(JS/TS/Python/JSON/Markdown/Shell/YAML/图片/压缩包/配置文件等)。
|
|
63
64
|
- 编辑器:行号、语法高亮(叠层渲染)、主题配色、`Ctrl/Cmd+S` 保存、冲突提示(重新加载/强制保存)、二进制与 >2 MB 文件只读保护、UTF-8/LF/CRLF/行数状态栏;内嵌内容面板不显示文件路径/保存工具条,未保存修改在文件标签前显示灰点。
|
|
64
|
-
-
|
|
65
|
+
- **图片与 CSV 预览**:PNG/JPG/GIF/WebP/BMP/ICO/AVIF/SVG 直接在内容面板按图片显示(最大 24 MB);CSV/TSV 默认按表格显示,可在「表格 / 源码」间切换,源码视图仍可编辑保存。超过 1000 行或 80 列时只展示截断后的表格。
|
|
66
|
+
- **快捷键**:`Ctrl/Cmd+S` 保存当前文件;`Ctrl/Cmd+W` 关闭当前标签(未保存时提示保存/放弃/取消);`Ctrl+Tab` / `Shift+Ctrl+Tab` 切换标签;`Ctrl/Cmd+B` 显示/隐藏目录面板;`Ctrl/Cmd+Shift+F` 打开文件搜索。
|
|
67
|
+
- **自动保存**:设置 → 连接 →「编辑器行为」中开启;停止输入约 1 秒后自动保存。关闭时使用 `Ctrl+S` 手动保存;未保存文件关闭前会弹窗,不会静默丢弃。
|
|
68
|
+
- **多个文件同时打开**:文件内容面板内最多同时打开 12 个标签;单击文件打开预览标签并替换未固定的预览,双击固定标签,重复点击同一文件聚焦原标签;本地文件与远端文件共用内部编辑器,本地文件可编辑保存。
|
|
65
69
|
|
|
66
70
|
### 运行中图标 / 本地技能
|
|
67
71
|
|
|
@@ -70,7 +74,7 @@
|
|
|
70
74
|
|
|
71
75
|
### 右键菜单(文件/文件夹/根节点)
|
|
72
76
|
|
|
73
|
-
传输(下载到 `.remote
|
|
77
|
+
传输(下载到 `.remote`)、下载到默认文件夹、队列、打开、用记事本编辑、复制、粘贴、复制路径、**移动到…**(只允许移动到同一棵本地树或同一棵远程树内的目录)、重命名、删除、更改权限、新建(文件夹/文件)、属性。远端操作走 SFTP;本地目录的同类操作走本机文件系统。传输队列一次执行一个任务并显示排队/传输中/完成/失败状态。
|
|
74
78
|
|
|
75
79
|
### 联动工作区结构
|
|
76
80
|
|
package/docs/API.md
CHANGED
|
@@ -60,14 +60,16 @@ relative to the scope root, or absolute inside it.
|
|
|
60
60
|
| `workspaces.test` | `{ id }` | `{ ok, latencyMs?, resolvedPath?, error? }` |
|
|
61
61
|
| `fs.list` | `{ workspaceId?/linkedId?, path }` | `{ path, entries: RemoteEntry[] }` |
|
|
62
62
|
| `fs.read` | `{ workspaceId?/linkedId?, path, maxBytes? }` | `FileRead` |
|
|
63
|
+
| `media.read` | `{ workspaceId?/linkedId?, path }` | `{ path, size, mtime, mime, base64 }` (PNG/JPG/GIF/WebP/BMP/ICO/AVIF/SVG, max 24 MB) |
|
|
63
64
|
| `fs.write` | `{ workspaceId?/linkedId?, path, content, expectedMtime? }` | `{ path, size, mtime }` |
|
|
64
65
|
| `fs.stat` | `{ workspaceId?/linkedId?, path }` | `{ path, relative, type, size, mtime, mode }` |
|
|
65
66
|
| `fs.mkdir` | `{ workspaceId?/linkedId?, path }` | `{}` |
|
|
66
67
|
| `fs.rename` | `{ workspaceId?/linkedId?, from, to }` | `{}` |
|
|
68
|
+
| `fs.move` | `{ workspaceId?/linkedId?, path, targetDir? }` | `{ path }` (same remote tree; collision → 409) |
|
|
67
69
|
| `fs.delete` | `{ workspaceId?/linkedId?, path }` | `{}` |
|
|
68
70
|
| `fs.home` | `{ workspaceId?/linkedId? }` | `{ home }` |
|
|
69
|
-
| `settings.get` | `{}` | `{ editorTheme, editorThemeFamily, editorThemeMode, fileOpenMode }` |
|
|
70
|
-
| `settings.update` | `{ editorTheme?, editorThemeFamily?, editorThemeMode?, fileOpenMode? }` | `{ editorTheme, editorThemeFamily, editorThemeMode, fileOpenMode }` |
|
|
71
|
+
| `settings.get` | `{}` | `{ editorTheme, editorThemeFamily, editorThemeMode, fileOpenMode, autoSave }` |
|
|
72
|
+
| `settings.update` | `{ editorTheme?, editorThemeFamily?, editorThemeMode?, fileOpenMode?, autoSave? }` | `{ editorTheme, editorThemeFamily, editorThemeMode, fileOpenMode, autoSave }` |
|
|
71
73
|
| `local.browse` | `{ path? }` | `{ path, parent, home, entries: [{ name, path }] }` |
|
|
72
74
|
| `local.mkdir` | `{ path, name }` | `{ path }` |
|
|
73
75
|
| `linked.list` | `{}` | `{ links: LinkInfo[] }` (each link carries `running`) |
|
|
@@ -79,6 +81,7 @@ relative to the scope root, or absolute inside it.
|
|
|
79
81
|
| `linked.syncCancel` | `{ id }` | `{ cancelled: boolean }` |
|
|
80
82
|
| `local.list` | `{ path }` | `{ path, entries: [{ name, path, type, size, mtime }] }` |
|
|
81
83
|
| `local.openExternal` | `{ path }` | `{ opened, path }` |
|
|
84
|
+
| `terminal.open` | `{ workspaceId?/linkedId?, side: 'remote'\|'local' }` | `{ opened, side, path, host? }` |
|
|
82
85
|
| `fs.openExternal` | `{ workspaceId?/linkedId?, path }` | `{ opened, localPath, size }` |
|
|
83
86
|
| `localWorkspace.create` | `{ path, name? }` | `{ workspaceId, title, path }` |
|
|
84
87
|
| `session.info` | `{ sessionId }` | `{ sessionId, cwd, running }` |
|
|
@@ -92,9 +95,11 @@ relative to the scope root, or absolute inside it.
|
|
|
92
95
|
| `fs.copy` | `{ workspaceId?/linkedId?, path, targetDir? }` | `{ path, files }` |
|
|
93
96
|
| `fs.chmod` | `{ workspaceId?/linkedId?, path, mode }` | stat |
|
|
94
97
|
| `local.read` | `{ path }` | `{ path, content, size, mtime, truncated, binary, tooLarge, editable }` |
|
|
98
|
+
| `local.media` | `{ path }` | `{ path, size, mtime, mime, base64 }` (max 24 MB) |
|
|
95
99
|
| `local.write` | `{ path, content, expectedMtime? }` | `{ path, size, mtime }` |
|
|
96
100
|
| `local.stat` | `{ path }` | `{ path, type, size, mtime, mode }` |
|
|
97
101
|
| `local.rename` | `{ from, to }` | `{ path }` |
|
|
102
|
+
| `local.move` | `{ path, targetDir?, root? }` | `{ path, type }` (same local tree; collision → 409) |
|
|
98
103
|
| `local.delete` | `{ path, root? }` | `{}` (recursive) |
|
|
99
104
|
| `local.copy` | `{ path, targetDir? }` | `{ path, type }` |
|
|
100
105
|
| `local.newFile` | `{ path }` | `{ path }` |
|
|
@@ -112,7 +117,7 @@ Under `$DSH_HOME/linked-workspace/`:
|
|
|
112
117
|
|
|
113
118
|
- `workspaces.json` — direct remote directories (no credentials).
|
|
114
119
|
- `linked.json` — linked workspaces (no credentials).
|
|
115
|
-
- `settings.json` — `{ editorTheme, fileOpenMode }`.
|
|
120
|
+
- `settings.json` — `{ editorTheme, editorThemeFamily, editorThemeMode, fileOpenMode, autoSave }`.
|
|
116
121
|
- `known_hosts.json` — trust-on-first-use host key fingerprints.
|
|
117
122
|
- Local linked directories also hold `.local/linked.json` (same binding without
|
|
118
123
|
secrets) and the optional `.remote/` mirror.
|
package/docs/VERIFY.md
CHANGED
|
@@ -71,18 +71,22 @@ Host code (lib/) reloads live with `plugin_manager set_plugin include:linked-wor
|
|
|
71
71
|
1. 会话标题栏「打开右侧边栏」→「+」→「联动工作区目录」;旧标签页刷新后标题也会自动改成该名字。
|
|
72
72
|
2. 面板:右侧固定目录面板包含**上方「远程目录」、下方「本地目录」**;工具栏的面板按钮可开/关整个目录面板。中间是文件内容面板;未打开文件时显示「打开文件 / 从工作区目录树中选择文件」。本地树默认隐藏 `.local`/`.remote`,开「显示隐藏文件」后可见。
|
|
73
73
|
3. 展开工作区 → 目录树懒加载;文件行有按类型区分的彩色图标(.py/.ts/.json/.md/.png 等)。
|
|
74
|
-
4.
|
|
74
|
+
4. **单击**文件夹立即展开/折叠;**单击**文件在中间内容面板打开;单击另一个文件会替换未固定的预览标签。**双击**文件固定标签,之后单击其他文件不会覆盖;双击文件夹保持展开。目录面板保持最右侧可见。本地文件标签不显示图标,并且可在内容面板中编辑保存。
|
|
75
75
|
5. 工具栏「切换文件树」:所有文件 / 已更改的文件 / 所有更改;远端仓库(如 nsl-wp)应列出 `git status` 修改与未跟踪文件,本地非 git 目录提示「该目录不是 Git 仓库」。
|
|
76
76
|
6. 工具栏「在文件中搜索」:输入 `paradis` → 结果按「远程目录/本地目录」分组,点击结果打开文件;清空/关闭后回到原树。
|
|
77
77
|
7. 工具栏「打开选项菜单」:编辑器 / 系统默认应用(远端文件下载到临时目录并用本机默认应用打开)/ 复制路径(剪贴板得到远端绝对路径)。
|
|
78
78
|
8. 刷新按钮:目录、git 状态与搜索重新加载。
|
|
79
|
-
9.
|
|
80
|
-
10.
|
|
81
|
-
11.
|
|
82
|
-
12.
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
79
|
+
9. **多标签/固定**:单击文件 A → 预览标签;单击文件 B → A 被替换为 B;双击 B → B 固定;再单击文件 C → B 保留且新增 C 标签。重复点击已打开文件聚焦原标签;关闭一个标签后其槽位可复用(最多 12 个)。
|
|
80
|
+
10. **关闭未保存文件**:修改文件但不保存(关闭自动保存时),点标签上的 × → 出现「保存 / 放弃 / 取消」;点取消留在编辑器,点放弃关闭,点保存先写盘再关闭。
|
|
81
|
+
11. **快捷键**:`Ctrl+S` 保存;`Ctrl+W` 关闭当前标签(未保存时弹窗);`Ctrl+Tab` / `Shift+Ctrl+Tab` 切换标签;`Ctrl+B` 显示/隐藏目录面板;`Ctrl+Shift+F` 打开文件搜索。
|
|
82
|
+
12. **终端按钮**:远程树工具栏的终端按钮打开外部终端并自动 `cd` 到当前远程根目录;联动工作区的本地按钮打开本地终端并 `cd` 到本地目录。远程终端需使用系统 `ssh`,首次可能要求确认主机指纹/输入密码。
|
|
83
|
+
13. **自动保存**:设置 → 连接 →「编辑器行为」开启自动保存 → 修改文件后停止输入约 1 秒应自动写盘、灰点消失;关闭自动保存后再修改,不应自动写盘,`Ctrl+S` 才保存。设置重载后开关状态保持。
|
|
84
|
+
14. **传输按钮**:在树中选中远端文件/文件夹(行高亮),点工具栏传输按钮 → `.remote/` 出现对应文件;右键「队列」可看到排队/传输中/完成状态。
|
|
85
|
+
15. **显示隐藏文件**:打开目录时默认显示 `.git`、`.gitignore`、`.local`/`.remote` 等隐藏项;点眼睛按钮可隐藏,再点恢复。目录面板默认开启。
|
|
86
|
+
16. **右键菜单**:文件/文件夹/根节点右击 → 传输、下载到默认文件夹、队列、打开、用记事本编辑、复制、粘贴、复制路径、重命名、删除、更改权限、新建(文件夹/文件)、属性;在远端与本地两侧各验证一次重命名/删除/新建/属性。
|
|
87
|
+
17. **运行中图标**:在该联动工作区的会话里发起一轮对话,运行期间左侧工作区的链环图标应变蓝;结束后(约 5 秒内)恢复原色。
|
|
88
|
+
18. **本地技能**:在联动工作区会话里让模型列出本地技能(或调用 `linked_skills` list/read);应能读到本机 `~/.dsh/skills` / `<local>/.dsh/skills` 下的 SKILL.md,且无需在远端安装;`skills.list` API 返回非空。
|
|
89
|
+
19. 编辑器:内部内容面板不显示路径/保存头部(Ctrl+S 保存);修改未保存时文件标签名前出现灰色圆点;行号、语法高亮(字符串/注释/关键字有颜色)、主题配色、
|
|
86
90
|
远端并发修改 → 冲突提示(重新加载/强制保存)、二进制/大文件只读;底部状态栏完整可见(不再被视口裁切)。
|
|
87
91
|
|
|
88
92
|
## 联动会话(模型工具)
|
|
@@ -109,3 +113,13 @@ Host code (lib/) reloads live with `plugin_manager set_plugin include:linked-wor
|
|
|
109
113
|
7. 以上操作在本地目录与远端(联动工作区)文件上都应可用;Office/PDF 需要 Python 3 + python-docx/openpyxl/python-pptx/PyMuPDF。
|
|
110
114
|
|
|
111
115
|
- 新建一个空白联动工作区会话:右侧栏开始页应出现「联动工作区目录」,打开后目录面板正常显示。
|
|
116
|
+
|
|
117
|
+
## 图片 / CSV 预览与移动(0.8.0)
|
|
118
|
+
|
|
119
|
+
1. 本地目录与远端目录各放一个 PNG、一个 SVG、一个 JPG:单击文件应在内容面板显示图片,状态栏显示 MIME 与大小;损坏图片显示错误提示而不是空白。
|
|
120
|
+
2. 打开 CSV/TSV:默认显示表格,第一行作为表头;超过 1000 行或 80 列时显示截断提示;点「源码」可切换编辑器并保存,表格模式下保存按钮禁用。
|
|
121
|
+
3. 含引号、逗号、字段内换行的 CSV 应正确分列;TSV 按制表符分列。
|
|
122
|
+
4. 右键文件/文件夹 →「移动到…」:在本地目录内可移动到当前目录的任意子目录,在远端目录内可移动到当前远程工作区根目录或子目录。
|
|
123
|
+
5. 移动后目录树与内容面板一致;已打开的旧标签关闭,已修改未保存的文件阻止移动并提示先保存。
|
|
124
|
+
6. 目标目录已有同名文件时提示冲突(409),不覆盖;文件夹不能移动到自身或其子目录。
|
|
125
|
+
7. 移动选择器不能浏览到当前工作区/本地目录之外,根目录本身不可作为被移动项。
|