system0.1.3
插件中心Plugin HubPlugin Hub
@omdsh-plugins/omdsh-plughub
在设置里安装、卸载并配置 omdsh 插件。Install, remove, and configure omdsh plugins from inside Settings.
设置页里多出来的一个标签页:上半是可以装的目录,下半是已装插件的配置表单。表单直接由插件注册的 schema 生成,所以这个中心不认识任何一个具体插件 —— 这正是它存在的意义。更新按钮由 semver 比较点亮;装完给一条重启横幅,因为插件图层是在启动时组合的,热挂载本来就做不到,说"重启"是诚实的汇报。
One more tab beside the shipped Plugins pages: a catalog on top, a form per installed plugin below. The form is generated from the schema the plugin already registered, so the hub knows nothing about any plugin in particular — which is the whole point. Update is lit by one semver comparison, and an install raises a restart banner, because plugin layers are composed at boot and saying so is the honest report.
input0.1.1
快捷键ShortcutsShortcuts
@omdsh-plugins/omdsh-shortcuts
为每个命令绑定一个快捷键,桌面菜单与网页端共用一份配置。One chord per command, on the desktop menu and in the page alike.
一份文档,两个界面:shell 类命令由 Electron 主进程通过原生菜单加速键执行,runtime 类走这个插件的交换机,browser 类由页内监听器接住。插件只声明"我能做什么",哪个键到达它是这里的事 —— 改绑当场生效,不重启外壳,也不是一次 harness 改动。
One document, two surfaces: a shell command is performed by the Electron main process through a native accelerator, a runtime command through this plugin's switchboard, a browser command by its in-page listener. A plugin says only what it can do; which chord reaches it is decided here — and editing that rebuilds both in place, with no shell restart and no harness edit.
CmdOrCtrl+Shift+E → panel.files Ctrl+` → panel.terminal
workspace0.1.1
远程开发Remote DevelopmentRemote Development
@omdsh-plugins/omdsh-remdev
把工作区接到一台 SSH 服务器上,文件、终端、智能体和项目技能都在那台机器上。Attach a workspace to an SSH server: its files, terminals, agents, and project skills all live there.
侧栏 Workspaces 那一行末尾多一个 Remote Connect:描述一台机器、连上去、在上面装好 .dsh-server、选一个目录 —— 回来的是一个普通工作区,只是文件夹上带个地球。workspaces.create 要求目录真实存在,所以这个插件在 $DSH_HOME/remotes/ 下给它一个真的镜像目录;于是会话分组、注册表、投影、用量汇总全都一行不用改。
A Remote Connect button at the trailing end of the sidebar's Workspaces bar: describe a machine, connect, provision a .dsh-server there, pick a directory. What comes back is an ordinary workspace with a globe on its folder. workspaces.create requires a real directory, so this plugin gives it one — a mirror under $DSH_HOME/remotes/ — and everything downstream works untouched.
system0.1.0
远程控制Remote ControlRemote Control
@omdsh-plugins/omdsh-remctrl
在 tailnet 上用手机查看进度、批准工具调用、下发新任务。Watch, approve, and dispatch from a phone on your tailnet.
harness 的第二道前门,跑在自己的端口上,前面是设备配对和分级方法白名单。绑定策略从设计上就不能被配置到公网接口;配对是六位数字码,同时只有一个、五分钟、五次机会;设备令牌以哈希存储,重启后仍在,可撤销。当前进度 M0 —— 门和锁已经装好了,门后面的会话读取、实时流、批准和派活是 M1–M4。
A second front door on its own port, behind device pairing and a tiered method allowlist. The bind policy cannot be configured onto a public interface; pairing is a six-digit code, one outstanding at a time, five minutes, five guesses; device tokens are stored as hashes, survive a restart, and are revocable. Status M0 — the door and the lock; reading sessions, the live stream, approvals and dispatch are M1 through M4.
insight0.1.0
用量UsageUsage
@omdsh-plugins/omdsh-usage
在会话顶栏显示本次会话花费、本项目花费与账户余额。Session spend, project spend, and account balance, in the conversation's top row.
三个数字放进你本来就在看的那一行。Chat 和 Work 里它坐在模式芯片右边;Code 模式整列是终端、根本没有头部,它就挪到对角去。低于一个可配置的下限(默认 10,按账户计价货币)三个图标全部转红 —— 在那之上,一点颜色都不加。
Three figures in the row you are already reading. In Chat and Work the badge sits right of the mode chip; in Code the whole column is a terminal with no header to sit in, so it moves to the opposite corner. Under a configurable floor — 10 by default, in the account's own currency — all three icons turn red. Above it, nothing is tinted at all.
Help ⚙ Code mode 💬 0.023 ¥ 📁 1.03 ¥ 👛 964.15 ¥
insight0.1.0
状态StatusStatus
@omdsh-plugins/omdsh-status
在 Work 窗口右上角显示当前项目名称与 git 分支和变更计数。Project name and git branch with change counts, at the top-right of the Work window.
哪个项目、哪个分支、动了多少 —— 一眼的事。项目名取自已注册的 workspace;旁边是当前分支,和领先/落后、已暂存、已修改、未跟踪、冲突里非零的那几个计数 —— 有冲突时只有它一个数字是红的,一行里每个符号都喊叫的读数等于什么都没说。host 半边按会话解出工作目录跑一次 git status,浏览器只收到要画的那几个数字,没有路径清单、没有 diff;目录不在 git 仓库里时就只显示项目名。
Which project, which branch, how much has moved — at a glance. The name comes from the workspace you registered; beside it the branch, and whichever of ahead/behind, staged, modified, untracked and conflicts are non-zero — conflicts are the one count drawn in the alarm colour, because a row where every glyph shouts says nothing. The host half resolves the session's directory and runs one git status; the browser receives only the counts it draws, with no path list and no diff, and a directory outside any repository shows the name alone.
⬇ 导出 omdsh-plugins ⎇ main ↑1 +2 ~3 ?1
system0.1.3
模式系统Mode SystemMode System
@omdsh-plugins/omdsh-base
所有模式插件共用的模式开关,以及按模式给侧栏会话上色的圆点。The switch every mode plugin registers into, and the sidebar dots that colour their conversations.
它自己不发明任何模式 —— 这正是重点。只装它的 profile 能正常启动,并且完全看不到那个开关,因为没有东西可切的控件不是控件。它提供 sessionModes 注册表、悬浮在对话列上方的开关、每一行侧栏前面那颗按模式着色的圆点,以及把 New Session 先递给"正占着这一列的那个模式"的那次覆盖。它唯一贡献的那个姿态是本来就在屏幕上的那个 —— Work,harness 自己的那根列 —— 好让开关永远有地方可以切回去;装了 justchat 之后,由它那个会记事的 Work 顶替。
It invents no mode of its own — that is the point. A profile with this plugin and nothing else composes, boots, and shows no switch at all, because a control with nothing to switch between is not a control. It provides the sessionModes registry, the floating switch above the conversation, the coloured leading dot on every sidebar row, and the override that offers New Session to whichever segment is holding the column. The one posture it does contribute is the one already on screen — Work, the harness's own column — so a switch always has somewhere to switch back to; justchat's Work, which remembers where you were, replaces it.
workspace0.1.1
聊天模式Chat ModeChat Mode
@omdsh-plugins/omdsh-justchat
不用选项目目录就能开始对话,这些对话统一放在侧栏的 Chat 下面。Start a conversation without picking a project directory, kept together under Chat.
harness 是编码智能体,新建会话前先问你要哪个工作区 —— 合理,因为编码总要发生在某处。但不是每个问题都是活儿。这个插件在旁边补上另一种姿势:对话上方一个 Chat / Work 开关,一个受管的 Chat 工作区(真实目录 <dshHome>/chat),背后是一套一个工具都没有的 agent 组合。模式是推导出来的而不是存下来的:一个会话是不是 chat,取决于它算在哪个工作区名下 —— 存一个标志位,迟早会和屏幕上的事实打架。
The harness is a coding agent, and its New Session screen asks for a workspace first — reasonably, because a coding agent works somewhere. But not every question is work. This adds the other posture beside it: a Chat / Work switch above the conversation, a managed Chat workspace (a real directory at <dshHome>/chat), and an agent composition with no tools at all behind them. The mode is derived, not stored: a session is a chat exactly when it is accounted under that workspace — a stored flag would eventually disagree with the screen.
workspace0.1.1
代码模式Code ModeCode Mode
@omdsh-plugins/omdsh-code
在对话所属的工作区里开一个 harness 终端,与 Chat、Work 并列。A harness terminal in the conversation's workspace, beside Chat and Work.
网页界面和终端是同一个 harness 的两道前门。这个插件是让其中一道显示在另一道里的那条缝:按下 Code,整个对话列换成一个真的 dsh --profile omdsh-tui,banner 都在,跑在这个对话本来就算在的目录里。终端不是重新实现的 —— 屏幕上是 omdsh-tui 自己的前门,这个插件只负责起进程、转发字节。在终端里 /rename 一下,侧栏那一行跟着改。
The web GUI and the terminal are two front doors onto the same harness; this is the seam that lets one be shown inside the other. Pressing Code replaces the conversation column with a real dsh --profile omdsh-tui, banner and all, in the directory the conversation is already accounted under. Nothing of the terminal is reimplemented — this plugin starts that program and relays bytes. A /rename typed inside it moves the sidebar row.
workspace0.1.0
外部编辑器External EditorExternal Editor
@omdsh-plugins/omdsh-editor
用你真正在用的编辑器、终端或文件管理器打开当前会话的目录。Open the conversation's directory in the editor, terminal, or file manager you actually use.
会话头部的一个分裂控件:按左半边,当前对话的目录用你上次选的编辑器打开;点箭头,换一个。harness 既没有这个能力,也没有能绕到它外面去实现的接缝 —— 所以这个包两半都自己写:host 那半负责找出机器上装了哪些应用并把它拉起来,browser 那半负责把它们摆出来。
A split control in the session header: press the left half and the conversation's directory opens in the editor you chose last time; press the chevron and pick a different one. The harness has no such capability and no seam that would let one be reached around it, so this package adds both halves — the host side that finds the applications and starts one, and the browser side that offers them.
◧ VS Code ◧ Cursor ▤ Finder ▸ Terminal ▸ iTerm2
input0.1.1
侧边对话Side ChatSide Chat
@omdsh-plugins/omdsh-sidechat
在任何位置召唤一条独立的对话,带上你正看着的东西作为锚点。Summon a conversation of its own anywhere, anchored to whatever you were looking at.
harness 只有一个输入框,在对话列的底部,而它属于你正在跑的那件事。于是每一句"等等,这个函数是干嘛的"都要付两次钱:手离开你正在读的地方,问题挤进那条对话的上下文,然后就一直待在那儿,占着窗口、影响之后每一轮。按 ⌘L,就地开一条属于它自己的会话 —— 多轮、有历史、存在 Chat 工作区里,和侧栏点开的任何一条没有区别。界面上只有一个问题、一个答案,和工作时的一行字。
The harness has one input, at the bottom of the conversation column, and it belongs to the thing you are running. So every "wait, what does this function do?" costs you twice: your hands leave what you were reading, and the question moves into that conversation's context, where it stays — taking up window, shaping every turn after it. Press ⌘L and a conversation of its own opens right where you are: multi-turn, with history, stored in the Chat workspace. It shows a question, an answer, and one line while it works.
workspace0.1.0
侧边面板Side PanelsSide Panels
@omdsh-plugins/omdsh-sidepanel
右边一列文件树,下边一条终端,只在 Work 模式下出现。A file tree down the right edge and a terminal along the bottom, in Work mode.
harness 出厂是三列 —— 会话列表、对话、详情 —— 没有任何地方可以看一个文件或者跑一条命令。这个插件补上这两样,然后就停手:右边列出这个对话自己的目录、一次预览一个文件,下边是同一个目录里的 shell。没有编辑器、没有 git 面板、没有浏览器、没有标签栏 —— 在这里,一个容易被忽略的面板比一个第二应用值钱。
The harness ships a three-column frame — session list, conversation, details — and no place to look at a file or run a command. This adds the two, and stops there. The right panel lists the conversation's own directory and shows one file at a time; the bottom panel is a shell in that same directory. There is no editor, no git surface, no browser, no tab strip: a panel that is easy to ignore is worth more here than one that is a second application.