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
English · 简体中文
独立 Git 状态(Git Graph)插件:DSH Web 右缘 Git 状态浮窗 —— commit DAG 泳道图 + 未提交改动/stash + 行内详情 diff + 分支操作。
🔖 v0.4.0 · 🧩 纯前端自渲染 DOM(greeter 模式,零 React、零构建链)· 🛠 Node half 只读/写路由 · 📜 MIT · 📦 npm @wongzexu/dsh-git-status
⎇ main [gitee];同一分支有 ≥2 个远程时
折叠为计数子标签 ⎇ main [2](悬停 pill 任意处即显示完整远程引用列表,右键先选远程再操作);
远程 HEAD 符号引用(gitee/HEAD)默认过滤git reflog refs/stash 插入图中(双层圆 + stash@{n} 徽标),
展开详情(base 显式两树 diff + untracked 第三父快照追加)check-ref-format 权威校验双保险force 旁路;仅未跟踪文件不拦)git add 再继续)git fetch --all
(镜像上游工具栏 Fetch from Remote(s) 形态:无对话框、prune 默认关),
无论成败图都即时刷新(多远程可能部分成功);失败分类提示
(网络/认证错误、远程不存在、远程仓库不存在或不可达)MERGE_HEAD 等标记)/git/events 订阅(2s 服务端状态键对比 + 变化推送 + 15s 心跳),
其他终端 checkout/提交时图即时刷新;10s 轮询保留作断连兜底dsh web)git 命令行工具(插件通过系统 git 执行所有操作)方式一:npm 安装(推荐,发布版)
dsh plugin --profile web add @wongzexu/dsh-git-status
方式二:从 GitHub 安装(源码版)
dsh plugin --profile web add github:Wongzexu/dsh-git-status
方式三:本地目录安装(开发/自用)
dsh plugin --profile web add /path/to/dsh-git-status
把 /path/to/dsh-git-status 换成插件目录的实际路径(例如本仓库根目录)。
⚠️ 注意:npm 上另有同名(无作用域)包
dsh-git-status(其他作者的 React 实现,与本插件无关);安装请认准@wongzexu/dsh-git-status。
@wongzexu/dsh-git-status 已启用(可随时停用/启用)。📖 完整操作指南(中英双语):docs/USAGE.md —— 界面速览、Git 图阅读、分支操作、冲突处理、远程拉取全流程详解。
git fetch --all,prune 默认关),完成后图即时刷新。提示:当前会话工作区不是 git 仓库时,浮窗内会显示提示,切换到 git 仓库所在会话即可。
dsh plugin --profile web remove @wongzexu/dsh-git-status
dsh-git-status/
├── package.json # dsh.bundle.patch + dsh.client.inject + platform: web
├── cordis.patch.yml # 挂载 Node half
├── lib/
│ ├── index.mjs # Node half:git log/show/branch/fetch/push/remote/stash/events 八路由(末尾导出测试用纯函数)
│ └── client.js # client bundle(构建产物,__ModuleLoader__ 契约)
├── src/client/index.js # client 源码(手写 CJS,单模块)
├── scripts/build-client.js # 零依赖构建脚本(纯 Node)
└── tests/
├── fixtures/repo.mjs # 造仓库辅助(mkdtemp 真实 git 仓库,t.after 自动清理)
├── git-log.test.mjs # 装饰解析/未提交分类/虚拟行组装/stash/show/冲突状态
├── git-branch.test.mjs # 分支名校验/守卫/失败分类/增删改合/写路由(含 CSRF)
├── git-fetch.test.mjs # 远程列表/名称校验/fetch 失败分类/真实拉取(file:// 裸仓库,含 prune)/写路由(含 CSRF)
├── git-push.test.mjs # push 参数校验/失败分类/真实推送(set-upstream、non-fast-forward→force)/写路由(含 CSRF)
├── git-stash.test.mjs # stash selector 校验/apply/pop/drop/branch/两种冲突形态/写路由(含 CSRF)
├── git-remote.test.mjs # tag 名校验/删除远程分支(含降级)/推送与删除 tag(含同步远程)/写路由(含 CSRF)
└── git-events.test.mjs # SSE 订阅:初始推送/变化检测/心跳/断连清理
/plugins/dsh-gitstatus/* 路由(webServer),
客户端 SSE 订阅 /git/events 即时刷新 + 10s 轮询兜底git(-C 工作区 --no-pager -c color.ui=false、GIT_OPTIONAL_LOCKS=0、
LC_ALL=C 强制英文输出、GIT_EDITOR=true 禁编辑器、15s 超时强杀;fetch/push 放宽到 120s)data-chat-flow),不依赖 React 内部结构session=,优先 ctx.sessions.get(id).header.cwd;
缺省回退注册表/进程 cwd),拒绝 .. 分量与越界路径;只读命令白名单;
写路由(分支操作 + 拉取远程 + 推送 + 远程/标签操作 + stash)POST + 强制 application/json content-type(CSRF 防护),
分支名/remote 名/tag 名/stash selector 权威校验 + argv 数组(无 shell)+ 切换前守卫;fetch/push 超时放宽(120s)node scripts/build-client.js # 改 src/client/index.js 后重新打包 client(lib/client.js)
npm test # node:test 套件(150 用例,真实 git fixture,零依赖)
改 Node half 直接改 lib/index.mjs(无构建步骤),改完跑 npm test 回归。
测试链覆盖:装饰串分类、未提交改动 XY 位分类、UNCOMMITTED/stash 虚拟行组装、
stash 第三父、show 详情、冲突/进行中状态、分支名校验、切换守卫
(冲突/进行中/其他 worktree/未提交改动确认:staged/未暂存/未跟踪三组计数、
仅未跟踪放行、force 旁路带改动切换)、增删改合全路径(含合并冲突 abort/continue)、
失败 stderr 分类、写路由 CSRF(content-type 强校验)与全链路、SSE 订阅
(初始推送/变化检测/心跳/断连清理/删分支与 stash 变化推送)、fetch 全链路
(--all/单远程/prune 语义/失败分类/CSRF,file:// 裸仓库真实拉取)、push 全链路
(set-upstream tracking / non-fast-forward → force 覆盖 / 失败分类 / CSRF)、
stash 全链路(push/apply/pop/drop/branch/两种冲突形态 / CSRF)、远程/标签操作全链路
(删除远程分支含降级、推送/删除 tag 含同步远程、tag 名校验 / CSRF)。
重新打包 client 后刷新浏览器页面即可看到效果(无需重启 web 服务); 改 Node half 后需重启 web 服务生效。
npm version patch # 或 minor / major,同步 package.json 版本号
npm publish --access=public --registry=https://registry.npmjs.org
注意:发布需要 npm 账号的两步验证(安全密钥/浏览器授权);若全局 registry 配置了镜像(如 npmmirror),发布必须显式带
--registry=https://registry.npmjs.org。
@wongzexu/dsh-git-status);GitHub Releases(tag/Release)待做MIT(DSH 生态示例插件形态,BSD-3-Clause 生态内自写自用)。
实现参考:mhutchie/vscode-git-graph(泳道布局/渲染 + Fetch from Remote(s) 按钮形态,MIT)、 zhu1090093659/dsh-web-ui 的 dsh-git-graph(分支操作守卫模型)。
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。