Repository navigation
Releases: RestRegular/dsh-notepad
Release list
v0.14.0 — Chromium app window for the detached notepad
Open the detached notepad as a Chromium app-mode window instead of a normal browser tab.
- The default detached window is now launched by the Host with the local Edge / Chrome
--app=URLform: no tabs, no address bar, a dedicated window with its own taskbar entry and independent minimize / restore. - Settings → Notepad → Detached window gains a Window form choice: app window (default) or system browser window. If no Chromium browser is found, the client falls back to the previous browser-window path.
- Every app window uses a dedicated temporary Chromium profile (
--user-data-dir),--window-size,--no-first-runand--no-default-browser-check, so it does not restore unrelated tabs or attach to the user’s main browser session. - A duplicate request while the detached page is alive returns the existing window instead of spawning another one.
- A page favicon is served to give the app window its notepad icon.
- Note: this is a dedicated Chromium window, not a DSH Electron
BrowserWindow. DSH’s main process denieswindow.openand exposes no window-creation IPC to plugins; a true Electron window needs a desktop-side core change. The README documents this boundary.
独立窗口改为 Chromium 应用窗口,不再默认打开普通浏览器标签页。
- 默认由宿主调用本机 Edge / Chrome 的
--app=URL,打开无标签页、无地址栏的独立应用窗口,有自己的任务栏窗口和最小化 / 还原。 - 设置页新增「窗口形式」:独立应用窗口(默认)/ 系统浏览器窗口;找不到浏览器时自动回退到原来的浏览器窗口。
- app 模式使用独立的临时 Chromium profile、窗口尺寸、
--no-first-run和--no-default-browser-check,不会恢复无关标签页或附加到用户主浏览器会话。 - 独立窗口仍由插件回环服务 + 随机 token 提供;DSH 最小化 / 关闭页面不影响它,关闭窗口或点「收回面板」后浮窗自动恢复。
- 这不是 DSH 自己的 Electron
BrowserWindow:主进程拒绝window.open且插件没有创建窗口的 IPC;真正的 BrowserWindow 需要桌面端核心改动,README 已说明边界。
v0.13.0 — detached notepad window
Detach the notepad into an independent window that survives the DSH interface being minimized or closed.
- A new header button and a Settings → Notepad → Detached window card open the same workspace note in a plugin-owned standalone window.
- The DSH floating panel collapses to its restore pill while detached; closing the standalone window, pressing its "Return to panel" button, the restore pill, or the Settings action brings the panel back.
- The standalone page is served by a token-guarded loopback server, not the DSH login route, so an external browser window keeps reading and writing
<workspace>/.dsh/notepad.jsonwhile DSH is minimized or its page is closed. - The detached window has its own minimize / restore, editing, Enter split, Backspace empty-card removal, archive / restore / delete, copy, AI improvement through the Host model selection, image preview, auto / manual save, dark mode and the configured theme and typography.
- Heartbeats and page-exit beacons keep the panel and window from fighting over the same note; a retired window is not revived by a URL prefetch.
- Security: the window token is random per Host process, the server binds
127.0.0.1only, every API requires the token and a same-origin request, and images are confined to the workspace notepad image directory.
独立窗口:让记事本脱离 DSH 界面,DSH 最小化或关闭页面时仍可显示和编辑。
- 标题栏新增「↗」按钮,设置页新增「独立窗口」卡片;脱离期间浮窗收起为右下角小圆钮。
- 独立窗口有自己的最小化 / 还原,支持编辑、Enter 拆分、段首 Backspace 删除空段、归档 / 恢复 / 删除、复制、AI 优化、图片预览、自动 / 手动保存和深色模式。
- 独立窗口由插件自己的回环服务 + 随机 token 提供,不经过 DSH 登录 Cookie,所以在 DSH 最小化或页面关闭后仍能继续写回同一份工作区笔记;DSH 浮窗会通过心跳检测窗口关闭并自动恢复。
- 安全:只监听
127.0.0.1,所有 API 要求 token + 同源,图片只能读取该工作区.dsh/notepad/images/。
v0.12.0 — edge-only arrow jumps and live sidebar badges
Switch cards from the text edges; refresh sidebar badges on save.
- Arrow keys used to leave a segment from its first / last logical line, so a caret anywhere on the first line (or the first column of the last line, or any row of a soft-wrapped line) jumped to a neighbour card.
↑now leaves the card only at the very start of the text and↓only at the very end; a multi-line card keeps its arrows for its own caret, including the middle columns of its first / last line.- The sidebar unsent badge stayed stale for the current workspace whenever the counts response carried a differently spelled path: the Workspace id is now resolved from the Session's Workspace membership first (then a case-insensitive projection / registry path match).
- The live note count overrides the polled value for that row, and a finished save wakes every mounted view's badge refresh instead of waiting for the poll (now 15s as a backstop for outside edits).
方向键只在分段文本最开头 / 最末尾切换相邻分段;侧边栏工作区角标随当前笔记实时更新。
- 以前按「首行 / 末行」判断,光标在首行任意列、末行第一列,或长文本软换行出来的行上都会误跳到相邻分段。
- 现在只有光标在文本最开头时
↑才跳到上一段末尾、在文本最末尾时↓才跳到下一段开头;多行分段内部(含首行 / 末行中间列)正常移动光标。 - 侧边栏未发送角标:工作区 id 先按当前会话的工作区成员关系解析(再退回大小写不敏感的投影 / 注册表路径匹配),当前工作区那一行始终显示笔记里的实时数量。
- 任一会话保存成功后会立刻唤醒其它会话的角标刷新,15 秒轮询只作为外部改动的兜底。
v0.11.2 — new-session sends stay in the workspace
Create new-session sends inside the current workspace.
sessions.createonly attaches a Session to a Workspace when the request names itsworkspaceId; the notepad created with a barecwd, so "send into a new session" landed in the sidebar's Ungrouped bucket even though the working directory was right.- The notepad now resolves the owning Workspace from the current Session's membership first, then from the normalized cwd path (Windows drive / UNC case-insensitive), waits for the Workspace projection's ready baseline, and only falls back to
cwdwhen no Workspace claims the directory. - A failed Workspace attachment still publishes a real Session; that Session receives the text instead of creating a second Ungrouped one.
修复「在新会话中发送」的新会话落到侧边栏「未分组」。
sessions.create只有带上workspaceId才会把会话挂进工作区;记事本以前只传cwd,所以工作目录正确、会话却出现在「未分组」。- 现在先按当前会话的工作区成员关系匹配,再按规范化后的 cwd 路径匹配(Windows 盘符 / UNC 大小写不敏感),并等待工作区投影的 ready 基线;都匹配不到才退回
cwd。 workspaceId附件失败时 Host 仍会发布真实会话,直接用它继续发送,不会再建第二个未分组会话。
v0.11.1 — frosted-glass selection label
Give the selection label a frosted-glass background.
- The "select all / N selected" label no longer paints an opaque block: its background is now the panel surface at 80% opacity with its own saturation + blur (following the panel blur setting) and a matching 12px fade on the right edge.
- Overflowing action buttons sliding underneath now show as a soft frosted blur instead of being hidden by a solid strip; the label stays readable in both flat and glass panel styles.
全选区域改为毛玻璃底色。
- 「全选 / 已选 N 段」不再画不透明色块:底色改为面板表面色的 80% 透明度,并叠加饱和度与模糊(跟随面板模糊度设置),右缘保留同色 12px 渐隐。
- 溢出滑到标签下方的操作按钮现在会被柔和的毛玻璃虚化,而不是被纯色条完全盖住;纯色扁平与毛玻璃两种面板样式下文字都保持可读。
v0.11.0 — undo composer inserts / replaces, never replay sends
Record composer inserts / replaces in undo, keep sends irreversible.
- Plugin undo / redo now also records "insert into composer" and "replace composer" as single steps (stored as the draft text before / after the operation), so undo restores the draft the action overwrote and redo applies it again.
- A composer step only applies while the draft still equals the content that step produced; if the draft was typed into, cleared by a send or belongs to another session, the stale step is retired instead of wiping newer text.
- Sends are never undo / redo steps: notepad sends, send-to-new-session and the chat-send archive capture all commit with
record: false. - Cards a send archived (
originsend/compose) are pinned to their current body and archived state in every restored snapshot, and re-appended when a snapshot predates them, so undo / redo can neither unarchive, rewrite nor resend them.
撤销 / 重做包含插入、替换,发送不可撤销 / 重做。
- 插件撤销 / 重做现在也记录「插入到输入框」和「替换输入框内容」,各记一步(存操作前后的对话框文本):撤销会把对话框恢复成操作前的内容,重做再放回。
- 只有对话框仍等于该步留下的内容时这一步才生效;之后手动改过、被发送清空或属于别的会话时,该步自动作废,不会吞掉新输入。
- 发送不进入撤销 / 重做:记事本发送、发送到新会话、对话框发送后的自动归档都用
record: false提交。 - 被发送归档的分段(
origin为send/compose)在恢复历史快照时按现内容、现归档状态固定,快照里没有就补回,撤销 / 重做既不会恢复成未发送,也不会改写或重发。
v0.10.0 — archive chat sends and fold archive cards
Archive chat sends and foldable archive cards.
- A successful message sent from the conversation composer is now mirrored into the current workspace archive (
origin: "compose"), persisted immediately and de-duplicated by content against every active / archived segment. - Archive cards gained a fold toggle. Auto-saved chat messages start collapsed; manually archived and notepad-send segments (plus legacy archives) start expanded.
- Added origin metadata (
manual/send/compose) to archived segments in.dsh/notepad.json, with forgiving reads for old files.
对话发送自动归档 + 归档卡片可折叠。
- 在会话输入框成功发送消息后,会作为当前工作区的归档分段保存(
origin: "compose"),立即落盘,并按内容与所有活动 / 归档分段去重。 - 归档卡片新增折叠按钮:自动保存的对话消息默认折叠;手动归档、记事本发送按钮归档以及旧版归档默认展开。
.dsh/notepad.json的归档分段新增origin(manual/send/compose)字段,旧文件读取时保持兼容。
v0.9.5 — bottom padding under the action buttons
Bottom padding under the action buttons.
- The right-aligned action buttons are top-aligned inside the bar with 4px of padding below, so the archive/delete group no longer touches the toolbar border.
补齐按钮栏底部间距。
- 右侧操作按钮改为顶部对齐,按钮下方保留 4px padding,归档/删除按钮组不再贴住按钮栏下边框。
v0.9.4 — spacing between the action bar and the first card
Extra vertical spacing between the action bar and the first segment card.
- The segment list now keeps 14px of top padding, so the selected card and the right-aligned hover groups no longer look cramped at that gap.
增加按钮栏与第一张分段卡片之间的垂直间距。
- 分段列表顶部 padding 从 8px 调整为 14px;选中卡片与右对齐按钮组之间不再显得贴在一起。
v0.9.3 — AI textarea grow and archive-preserving Backspace
AI rewrite height re-measurement and archive-preserving Backspace deletion.
- After an AI rewrite (or undo/redo and other programmatic text changes), every segment textarea is measured again, so a taller result expands the input instead of overflowing.
- Backspace deleting the last remaining active segment now keeps all archived segments; the fresh empty card is appended instead of replacing the whole note.
AI 优化后文本区自动撑开,Backspace 删除最后一条活动分段不再清空归档。
- AI 优化(以及撤销 / 重做等程序化改写)提交后会重新测量所有分段文本区高度,行数变多时输入框会自动长高。
- Backspace 删除最后一条活动空分段时会保留全部归档分段,只补一个新的空分段。