DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Flutter Tools — DeepSeek Harness 插件(DSH Plugin)
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
F

dsh-flutter-tools

Flutter Tools

用于 DSH 侧边栏的 Flutter 面板:VM Service 连接、热重载/热重启、重建跟踪、性能分析、内存和网络捕获,以及基于 flutter-devtools-mcp 的一键性能会话

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:nikitafedorov008/dsh-flutter-tools#83f540a34216fdc89331e6abd5157bfcae1e917e
README兼容性版本

兼容性与来源证明

Flutter Tools 以 dsh-flutter-tools 发布,当前版本为 0.0.1。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/10/3

版本

0.0.1stable
2026/10/3

相关插件

正在加载相关插件…

最新版
0.0.1
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
MIT
发布源
github
GitHub
★ 0
周下载
0
最近提交
2026/10/3
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 developer-tools 分类下经过校验的插件。

Ssh@linxin666/dsh-sshdsh Web GUI 的远程 SSH 操作:主机配置存储(~/.dsh/dsh-ssh.json,可从 ~/.ssh/config 导入)、支持跳板主机的持久化 ssh2 连接池、exec / PTY Web 终端 / SFTP 传输 / 本地端口转发隧道 / 集群执行Update@linxin666/dsh-update用于 dsh Web GUI 的自更新插件:探测 npm 上是否有更新的系列版本,并在原地运行所属配置的 pnpm 更新;可通过设置图标旁侧边栏中的触发器启动,并显示发布说明面板Tui@deepseek-harness-tui/dsh-tui用于 DeepSeek Harness 智能体、会话和工具的交互式终端界面。Cc Safety Netcc-safety-net编码代理 CLI 钩子——阻止破坏性命令和访问机密文件

README

dsh-flutter-tools

A Flutter panel for the DeepSeek Harness sidebar: run, inspect and profile a Flutter app without leaving the conversation.

Devices and launch

Devices come from a long-lived flutter daemon, launching is flutter run --machine with the VM Service URI picked up automatically, and everything else goes through the running app's own VM Service and flutter-devtools-mcp.

Connected app

Features

  • Devices — a long-lived flutter daemon (events, not polling): a phone plugged in appears by itself. The section shows one selected device with its OS logo (Apple, Android, Windows, Linux, or a browser for web targets) plus a small kind icon; clicking opens the list to switch, and the choice is remembered per project. Emulators come from the same daemon.
  • Launch — device, mode (debug / profile / release), flavor and --dart-define pairs, then one button that runs or stops depending on the state. The panel reads app.debugPort and connects itself; app logs land in the panel.
  • Flavor and defines — flavors are suggested from the project (Android productFlavors, non-default Xcode schemes); defines are a key/value editor. Both are remembered per project and validated before they reach the command line.
  • Control — hot reload, hot restart, screenshot (inline), widget tree, debug paint.
  • Debug toggles — the service extensions the app actually registered: debugPaint, showPerformanceOverlay, repaintRainbow, debugPaintBaselinesEnabled, timeDilation, inspector.show.
  • DevTools inside the panel — the daemon hosts the DevTools server and the panel embeds it (inspector, performance, cpu-profiler, memory, network, logging), with a button to move the same page into a sidebar browser tab.
  • App facts and memory — VM version, platform, pid and isolates as a key/value block; live heap readout, a GC button, saved memory snapshots and a compare of the last two.
  • Captures and profiling — rebuild tracking and HTTP capture as single switches, profiling session, collect_performance_session with the workspace root filled in.
  • Project commands — pub get, pub outdated, flutter doctor with rendered output: pub outdated becomes a table with the upgradable rows highlighted, flutter doctor a checklist.
  • Detach and web — leave the app running while the panel stops tracking it, or open a web build in a sidebar browser tab.
  • SDK — the workspace's own pin (.fvm/flutter_sdk, then .fvmrc) wins over whatever is on PATH.

Install

DeepSeek Harness → Settings → Add plugin, then paste this repository's address. That field takes a plugin package name, a GitHub repository address or a local directory. The CLI takes the same spec (dsh plugin add …); note that a profile the desktop app manages refuses CLI changes, so the plugin manager is the usual route.

Requirements:

  • a Flutter SDK (the workspace pin is preferred, PATH is the fallback);
  • npx on PATH — flutter-devtools-mcp is fetched on first use;
  • dsh-better-sidebar for the sidebar tab;
  • a Flutter app running in debug (rebuild tracking) or profile (metrics).

How it is put together

FileHalfRole
index.jshost (Cordis)registers the /flutter routes, owns the flutter daemon, the flutter run child and the flutter-devtools-mcp child, serves panel.html
panel.htmlserved pagethe whole UI, plain HTML/CSS/JS — no build step
client.jsclient bundleregisters the sidebar tab whose body is an iframe onto /flutter
icon.svgmanifest assetthe icon the plugin manager shows, declared as icon in package.json
cordis.patch.ymlbundle patchthe mount row; its name must equal the package name so the client bundle is served at /plugins/dsh-flutter-tools/client.js
dev-server.mjsdevelopmentruns the same routes outside DSH for UI iteration
docs/developmentthe screenshots above

Endpoints

All under /flutter, loopback Host only.

RoutePurpose
GET /flutterthe panel page (?cwd=&sessionId=)
GET /flutter/configworkspace cwd, fvm pin, resolved Flutter, toggle labels
GET /flutter/deviceslive device list (daemon)
GET /flutter/emulatorsemulators from the daemon
GET /flutter/flavorsflavors found in the project (Android blocks + Xcode schemes)
GET /flutter/runlaunch state: running, appId, mode, flavor, defines, VM Service URI, log tail
POST /flutter/runlaunch on a device: { deviceId, mode, flavor, defines }
POST /flutter/run/stopstop the launched app
POST /flutter/run/detachleave the app running, stop tracking it
POST /flutter/emulator/launchboot an emulator: { emulatorId }
GET /flutter/devtoolsDevTools page URL: ?page=…&uri=
GET /flutter/extensionsregistered debug extensions plus their current state
POST /flutter/extensiontoggle one extension: { name, value } (allowlist only)
GET /flutter/heapheap usage of the main isolate (?uri=)
POST /flutter/gccollect garbage, then report heap usage
POST /flutter/commandone-shot CLI: pub_get | pub_outdated | doctor
POST /flutter/callflutter-devtools-mcp tool call: { tool, arguments } (allowlist only)

Notes from building it

Things that cost time, recorded so nobody pays twice.

  • flutter daemon --machine is not a valid flag: it exits 2 with no output. The daemon speaks the same protocol without it.
  • flutter emulators --machine does not exist either.
  • --show-web-server-device is deliberately not passed: measured, it changes exactly one thing — the synthetic web-server device appears in the list — and nothing here depends on it.
  • flutter run, flutter daemon and npx are wrappers: the real process is a grandchild (dartvm), so a plain child.kill() leaves it running. Children are spawned detached and killed by process group — except after app.detach, where a group kill would take the detached app down with it, so the tool is killed by pid instead.
  • Measured: the tool does not exit by itself after app.detach (still alive 20 s later), while the app it launched survives on its own.
  • The VM Service needs an isolateId for getMemoryUsage, and has no collectAllGarbage RPC — that is what getAllocationProfile(gc: true) is for.
  • ext.flutter.brightnessOverride is not offered as a toggle: it reports the platform's effective brightness, so "off" still reads as dark on a dark system and the switch would lie.
  • --dart-define is compile-time: a changed define takes effect on the next launch, not on a hot restart.
  • Command output is clipped head-first: pub outdated keeps its column header at the top, and a tail clip left the panel with rows it could not parse.
  • The plugin icon is a data URL built by the harness from a top-level icon in package.json; there is no HTTP route for it, and the path must stay inside the manifest directory.

License

MIT — see LICENSE.

Development

node dev-server.mjs 9100 /path/to/flutter/project   # the panel, outside DSH

Screenshots in docs/ were taken from that dev server with Chrome in dark mode at device scale 2.

Attribution

The tab icon and the plugin icon are Flutter's mark, taken from simple-icons (CC0). Flutter is a trademark of Google; the mark is used here only to label Flutter tooling.