dsh-web-search-ddg
aooyoo
Zero-token DuckDuckGo search provider for the DeepSeek Harness (DSH) web seam — local headless browser, no API key, no m…
PROJECT TOPICS
PROJECT README
VSCode 风格的 终端模拟器 + 文件管理器 动态 Cordis 插件,运行在 DeepSeek Harness(DSH)WebUI 中:在宿主机(设备端)启动真实 PTY,投射到浏览器页面,让你边和 Harness 对话边用本地终端。
MIT License · 零运行时依赖(不使用 xterm.js,ANSI 引擎为纯 JS 自研)
终端
subprocess.spawnTerminal / node-pty),自动探测用户登录 shell($SHELL,bash 兜底),不写死 bash+ 新建 / × 关闭 / 状态点),页面刷新后会话自动恢复resize + 实测字符宽度),面板可拖动调高TERM=xterm-256color(绕开 node-pty 的 dumb 覆盖)——tmux / nano / htop / clear / 彩色输出均可工作文件管理器
cd)主题
--dsw-alias-*),明暗主题自动跟随;ANSI 调色板按 colorScheme 切换┌─ Host(DSH Node 进程)──────────────────────────────┐
│ subprocess.spawnTerminal ──→ 真实 PTY(bash/zsh/fish)│
│ 输出按块缓存(512KB) · term.* / files.* / state RPC │
└──────────────▲──────────────────────────────────────┘
│ host.call(JSON RPC,66ms 增量轮询)
┌──────────────┴──────────────────────────────────────┐
│ Client(浏览器) │
│ ANSI 屏幕模型 · 虚拟化渲染 · 输入捕获 · 文件树 │
│ 插槽:conversation.input.left(>_ 开关) │
│ conversation.input.dock(底部面板) │
└─────────────────────────────────────────────────────┘
ctx.effect 自动终止全部 PTY。| 方法 | 方向 | 说明 |
|---|---|---|
state |
C→H | 工作区根目录 |
term.list |
C→H | 会话快照列表(恢复用) |
term.spawn |
C→H | 新建 PTY(cols/rows/cwd) |
term.resize |
C→H | 原生 PTY resize(handle.terminal.resize 后门,带特性探测) |
term.write |
C→H | 原始 UTF-8 输入 |
term.poll |
C→H | 增量输出(偏移量续读) |
term.signal / term.kill |
C→H | 前台进程组信号 / 终止会话 |
files.list / files.read |
C→H | 目录列表 / 文本预览(1MB 上限,256KB 切片) |
├── src/
│ ├── host.js # Host 端源码(PTY 会话管理 + RPC)
│ └── client.js # Client 端源码(ANSI 引擎 + UI + 插槽注册)
├── scripts/
│ └── build-payload.js # 语法自检 + 生成 cordis_define 载荷
├── dist/ # 可直接粘贴部署的 JSON 载荷(由脚本生成)
│ ├── host.json
│ ├── client.json
│ └── define.json
├── BOOTSTRAP.md # 在任意 DSH 实例中部署的完整教程
├── LICENSE # MIT
└── README.md
动态插件没有「导入」通道:部署必须通过 DSH Agent 的
cordis_define工具以内联字符串提交,因此dist/提供 JSON 转义、1500 字符折行的粘贴即用载荷(避免手工转义 ~60KB 代码出错)。
BOOTSTRAP.md 的步骤调用 cordis_define(载荷取自 dist/)。cordis_run → 在 Run 卡片上批准(单勾=本次版本,双勾=后续更新免审批)。>_ 按钮 → 点击打开面板。cordis_inspect_self(<pluginId>) 检查宿主/客户端诊断。改代码后更新:编辑 src/ → node scripts/build-payload.js → cordis_define(kind: existing + 原 pluginId,得到新 packageId)→ cordis_run(mode: update)。
| 能力 | 状态 |
|---|---|
| bash / zsh / fish 交互 | ✅ |
彩色输出、clear |
✅ |
tmux(含 Ctrl+B 前缀、状态栏滚动区域) |
✅ |
nano(含 Ctrl+X 退出) |
✅ |
htop(备用屏幕缓冲) |
✅(无鼠标支持) |
vim / less |
✅ 基本可用(无鼠标/剪贴板增强) |
| 鼠标事件(X10/SGR) | ❌ 未实现 |
| XTGETTCAP 终端能力探测 | ❌ 未实现(tmux 容忍) |
| 终端内拖拽选取(自定义选区高亮) | ❌ 用原生 DOM 选区 + 右键复制代替 |
require 任意模块;PTY 能力以 DSH 服务为准。term.resize 依赖 handle.terminal 这一私有实现细节(dsh-subprocess-local 的 node-pty 对象),后端更换时会优雅降级为固定尺寸。rows 行(修复 nano/tmux/htop 单行渲染)、Ctrl 映射补全、IME 输入兜底、空会话保留「+ 新建」。MIT © 2025 lanshuye
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。