diff --git a/CHANGELOG.md b/CHANGELOG.md
index a655580..1236a2e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -17,6 +17,11 @@ adheres to [Semantic Versioning](https://semver.org/).
- **The example's approval gate** (`confirm-dangerous.ts`, used by `coding_agent` and `handoff_agent`) asks before selected operations that delete, discard or overwrite the owner's files. It tokenizes each command (quotes, escapes, redirections, heredoc bodies skipped) and reads it command by command. It follows `cd`, looks past wrappers (`env`, `timeout`, `nice`, `xargs`, …), reads git's subcommand past its global options, and checks `bash -c` scripts the same way. Anything with a path it cannot know (`$VAR`, `~`, globs, an unfollowable `cd`) asks. It covers `rm`, `git reset --hard`, `git clean`, `git checkout` / `restore` of paths, `git branch -D`, a forced push, `find -delete`, and a write, `mv`, `cp`, `tee` or redirection over an existing file. A guardrail, not a sandbox: targeted edits and what a script does inside are not checked. Before, it caught only `rm -r`, `sudo`, `chmod -R`, `git push --force`, `mkfs` and `dd`. Files the agent created this session, and the scratch folder a host names in `YOAGENT_SCRATCH`, are exempt. An ended session now ends its open questions with their default, where they used to be left open. Steering or a follow-up that arrives as a run ends (too late for that run to read) now starts the next run instead of waiting for whatever run comes next.
- Tool cards: a tool result's `details.view` is drawn as a card in the browser (and titles the tool line: in the browser when no UI plugin draws the tool, always in the terminal UI); questions gain `message` and multiple-choice `select` (options sent once each); the `ui` service gains `frontends()`; the terminal UI asks again on an answer that does not fit.
+### yoagent-rutis (unreleased)
+
+- **DSH's own host services for dsh plugins**: `plugins/dsh/host-services.json` lists the DSH packages that provide what many dsh plugins wait for — files, attachments, credentials, storage, session persistence, skills — and run headless; the compatibility probe loads them, the frontend examples on request (`--dsh-services`). Attachments, the credentials file and skills live under `DSH_HOME` (else `~/.dsh`) and skills also under `DSH_AGENTS_HOME` (else `~/.agents`), so hosts give the runtime homes of their own; that keeps `~/.dsh` and `~/.agents` out, **not** the inherited environment (DSH's credentials service reads it first), the project's `.env` or its skill folders, nor the filesystem (`dsh-fs-local` has no sandbox). In the [plugin compatibility](docs/evals/plugin-compatibility.md) matrix (re-measured 2026-10-12, on rutis 0.9) DSH's top 20 go from 3 to 4 usable (`@dfy-plugins/dsh-visualize`); what still blocks the rest is DSH's app — its web UI, model layer, agents and settings, among others. pi unchanged at 12/20.
+- yoagent-frontend: `PluginHostBuilder::env(runtime, name, value)` (a runtime not started is an error), `host::DshHome` (`YOAGENT_DSH_HOME`, else a private owner-only directory per run) and `host::rows_from_file`; `coding_agent` / `handoff_agent` take `--dsh-services`.
+
## yoagent-rutis 0.3.0 (2026-10-12)
yoagent-rutis only; yoagent is unchanged (0.25.2). Requires yoagent 0.25, **rutis 0.9** and **Rust 1.88**.
diff --git a/docs/evals/plugin-compatibility.json b/docs/evals/plugin-compatibility.json
index 1534e20..9ac3ca4 100644
--- a/docs/evals/plugin-compatibility.json
+++ b/docs/evals/plugin-compatibility.json
@@ -1,11 +1,11 @@
{
"runs": {
"pi": {
- "date": "2026-10-11",
+ "date": "2026-10-12",
"selection": "top 20"
},
"dsh": {
- "date": "2026-10-10",
+ "date": "2026-10-12",
"selection": "top 20"
}
},
@@ -13,7 +13,7 @@
{
"name": "pi-mcp-adapter",
"version": "5.2.0",
- "monthly": 1606843,
+ "monthly": 1608890,
"description": "MCP (Model Context Protocol) adapter extension for Pi coding agent",
"ecosystem": "pi",
"skills": {
@@ -44,11 +44,11 @@
"message": "[pi] no host ui (print mode): service pi-host-ui is not available"
},
{
- "level": "warn",
+ "level": "info",
"message": "[pi] not available in yoagent, ignored: index.ts: event \"mcp_servers_change\"; index.ts: event \"resources_discover\"; index.ts: event \"session_tree\"; index.ts: command /mcp-adapter; index.ts: command /mcp; index.ts: command /mcp-auth; index.ts: flag --mcp-config"
}
],
- "stderr": "",
+ "stderr": "Turned off Pi's built-in MCP so it doesn't run next to pi-mcp-adapter. If you remove the adapter, turn it back on in `pi config` → Built-in.",
"resources": {
"extensions": 1,
"skills": 0,
@@ -69,8 +69,8 @@
},
{
"name": "billion-context",
- "version": "0.1.192",
- "monthly": 936104,
+ "version": "0.1.195",
+ "monthly": 1072115,
"description": "A context-compression plugin — small context windows (a 100K context is enough), 5x fewer tokens, month-long single sessions (billions of tokens), and compression quality — for all agents: pi, OpenCode, Codex, Claude Code, and more. billion-context is all",
"ecosystem": "pi",
"skills": {
@@ -110,8 +110,8 @@
},
{
"name": "pi-web-access",
- "version": "0.38.0",
- "monthly": 693533,
+ "version": "0.39.0",
+ "monthly": 720509,
"description": "Web search, URL fetching, GitHub repo cloning, PDF extraction, YouTube video understanding, and local video analysis for Pi coding agent. Supports OpenAI, Brave, Parallel, TinyFish, Search1API, Searchinfinity, Querit, Tavily, Firecrawl, Crawl4AI, Jina, SE",
"ecosystem": "pi",
"skills": {
@@ -145,7 +145,7 @@
"message": "[pi] no host ui (print mode): service pi-host-ui is not available"
},
{
- "level": "warn",
+ "level": "info",
"message": "[pi] not available in yoagent, ignored: index.js: event \"agent_settled\"; index.js: event \"session_tree\"; index.js: command /websearch; index.js: command /curator; index.js: command /google-account; index.js: command /search; index.js: shortcut ctrl+shift+s; index.js: shortcut ctrl+shift+w"
}
],
@@ -172,7 +172,7 @@
{
"name": "pi-subagents",
"version": "0.77.0",
- "monthly": 622053,
+ "monthly": 622966,
"description": "Pi extension for single-agent delegation and scripted multi-agent workflows",
"ecosystem": "pi",
"skills": {
@@ -208,7 +208,7 @@
"message": "[pi] no host ui (print mode): service pi-host-ui is not available"
},
{
- "level": "warn",
+ "level": "info",
"message": "[pi] not available in yoagent, ignored: index.js: event \"turn_end\"; index.js: event \"model_select\"; index.js: event \"agent_end\"; index.js: event \"session_before_switch\"; index.js: event \"session_before_fork\"; index.js: event \"session_compact\"; index.js: event \"session_tree\"; index.js: event \"agent_start\"; index.js: event \"message_start\"; index.js: event \"agent_settled\"; index.js: event \"session_before_compact\"; index.js: command /subagents-watchdog; index.js: command /subagents; index.js: command /run; index.js: command /subagent-cost; index.js: command /subagents-doctor; index.js: command /subagents-inspect-rpc; index.js: command /subagents-guide; index.js: command /subagents-refine; index.js: command /subagents-fleet; index.js: command /subagents-detach; index.js: command /subagents-stop; index.js: command /subagents-steer; index.js: command /prompt-workflow; index.js: command /subagents-models; index.js: command /subagents-profiles; index.js: command /subagents-load-profile; index.js: command /subagents-refresh-provider-models; index.js: command /subagents-generate-profiles; index.js: command /subagents-check-profile; index.js: renderers"
},
{
@@ -304,8 +304,8 @@
},
{
"name": "@juicesharp/rpiv-ask-user-question",
- "version": "2.12.0",
- "monthly": 306198,
+ "version": "2.13.5",
+ "monthly": 301013,
"description": "Pi extension. A structured questionnaire the model can put to you when it would otherwise guess, with typed options instead of free-form replies.",
"ecosystem": "pi",
"skills": {
@@ -350,7 +350,7 @@
{
"name": "pi-mcp-extension",
"version": "1.5.1",
- "monthly": 270009,
+ "monthly": 285855,
"description": "MCP (Model Context Protocol) client extension for the Pi coding agent — connect Pi to any MCP server",
"ecosystem": "pi",
"skills": {
@@ -388,8 +388,8 @@
},
{
"name": "@juicesharp/rpiv-todo",
- "version": "2.12.0",
- "monthly": 203830,
+ "version": "2.13.5",
+ "monthly": 196941,
"description": "Pi extension. A todo list for the model, rendered as a live overlay that survives /reload and conversation compaction.",
"ecosystem": "pi",
"skills": {
@@ -420,7 +420,7 @@
"message": "[pi] no host ui (print mode): service pi-host-ui is not available"
},
{
- "level": "warn",
+ "level": "info",
"message": "[pi] not available in yoagent, ignored: index.ts: event \"session_compact\"; index.ts: event \"session_tree\"; index.ts: event \"tool_execution_end\"; index.ts: event \"agent_start\"; index.ts: command /todos; index.ts: shortcut ctrl+shift+t"
}
],
@@ -445,7 +445,7 @@
{
"name": "openwiki",
"version": "0.7.2",
- "monthly": 190350,
+ "monthly": 193787,
"description": "A CLI that uses a DeepAgents documentation agent to generate and maintain an OpenWiki for a codebase.",
"ecosystem": "pi",
"skills": {
@@ -537,8 +537,8 @@
},
{
"name": "@plannotator/pi-extension",
- "version": "0.28.12",
- "monthly": 132034,
+ "version": "0.28.17",
+ "monthly": 132677,
"description": "Plannotator Pi extension - interactive plan review with annotations, annotate agent messages, and review code/PRs",
"ecosystem": "pi",
"skills": {
@@ -567,7 +567,7 @@
"message": "[pi] no host ui (print mode): service pi-host-ui is not available"
},
{
- "level": "warn",
+ "level": "info",
"message": "[pi] not available in yoagent, ignored: pi-extension: event \"turn_start\"; pi-extension: event \"turn_end\"; pi-extension: event \"message_start\"; pi-extension: event \"message_update\"; pi-extension: event \"tool_execution_start\"; pi-extension: event \"agent_end\"; pi-extension: event \"agent_settled\"; pi-extension: event \"resources_discover\"; pi-extension: event \"session_compact\"; pi-extension: event \"session_tree\"; pi-extension: command /plannotator-plan-mode; pi-extension: command /plannotator-review; pi-extension: command /plannotator-annotate; pi-extension: command /plannotator-last; pi-extension: shortcut ctrl+alt+p; pi-extension: flag --plan"
}
],
@@ -732,9 +732,9 @@
},
{
"name": "@companion-ai/feynman",
- "version": "0.5.34",
- "monthly": 120059,
- "description": "Research-first CLI agent built on Pi and alphaXiv",
+ "version": "0.5.38",
+ "monthly": 114542,
+ "description": "The open source AI research agent.",
"ecosystem": "pi",
"skills": {
"found": 16,
@@ -771,11 +771,11 @@
"logs": [
{
"level": "debug",
- "message": "[pi] no host ui (print mode): service pi-host-ui is not available"
+ "message": "[pi] loaded research-tools.ts: events session_start, session_shutdown, before_agent_start, tool_result, message_end, before_provider_request; tools alpha_annotate_paper, alpha_list_annotations, hf_dataset_info, hf_repo_files, hf_repo_read_file, feynman_science_database_search"
},
{
"level": "debug",
- "message": "[pi] loaded research-tools.ts: events session_start, session_shutdown, before_agent_start, tool_result, before_provider_request; tools alpha_annotate_paper, alpha_list_annotations, hf_dataset_info, hf_repo_files, hf_repo_read_file, feynman_science_database_search"
+ "message": "[pi] no host ui (print mode): service pi-host-ui is not available"
}
],
"stderr": "",
@@ -833,120 +833,10 @@
"result": "refused",
"detail": "its session_start failed, so the adapter did not load it: anthropic-attribution.js: Cannot read properties of undefined (reading 'getProvider')"
},
- {
- "name": "pi-lens",
- "version": "4.4.3",
- "monthly": 108180,
- "description": "Real-time code feedback for pi — LSP, linters, formatters, type-checking, structural analysis & booboo",
- "ecosystem": "pi",
- "skills": {
- "found": 4,
- "loaded": [
- "pi-lens-ast-grep",
- "pi-lens-lsp-navigation",
- "pi-lens-write-ast-grep-rule",
- "pi-lens-write-tree-sitter-rule"
- ],
- "errors": []
- },
- "rows": [
- {
- "id": "pi",
- "state": "active",
- "error": null
- }
- ],
- "without": [],
- "loaded": true,
- "tools": [
- "effective_config",
- "lens_diagnostics",
- "module_report",
- "pi_lens_activate_tools",
- "project_report",
- "read_enclosing",
- "read_symbol",
- "symbol_search"
- ],
- "note_chars": 0,
- "logs": [
- {
- "level": "debug",
- "message": "[pi] loaded index.js: events resources_discover, session_start, session_tree, tool_call, tool_result, tool_execution_end, turn_start, agent_end, turn_end, agent_settled, session_shutdown, message_end, context; tools lens_diagnostics, symbol_search, effective_config, project_report, module_report, read_symbol, read_enclosing, pi_lens_activate_tools, ast_grep_search, ast_grep_replace, ast_grep_outline, lsp_navigation, lens_diagnostic_mark"
- },
- {
- "level": "debug",
- "message": "[pi] no host ui (print mode): service pi-host-ui is not available"
- },
- {
- "level": "warn",
- "message": "[pi] not available in yoagent, ignored: index.js: event \"resources_discover\"; index.js: event \"session_tree\"; index.js: event \"tool_execution_end\"; index.js: event \"turn_start\"; index.js: event \"agent_end\"; index.js: event \"turn_end\"; index.js: event \"agent_settled\"; index.js: command /lens-toggle; index.js: command /lens-context-toggle; index.js: command /lens-widget-toggle; index.js: command /lens-tdi; index.js: command /lens-map; index.js: command /lens-health; index.js: command /lens-perf; index.js: command /lens-tools; index.js: command /lens-allow-edit; index.js: flag --no-lens; index.js: flag --no-lsp; index.js: flag --no-autoformat; index.js: flag --immediate-format; index.js: flag --no-autofix; index.js: flag --no-tests; index.js: flag --no-delta; index.js: flag --lens-guard; index.js: flag --lens-checkout-guard; index.js: flag --no-opengrep; index.js: flag --no-read-guard; index.js: flag --no-lens-context; index.js: flag --lens-turn-summary; index.js: flag --lens-actionable-warnings; index.js: flag --lens-actionable-warning-actions; index.js: flag --lens-actionable-warning-autofix; index.js: flag --lens-actionable-warning-all; index.js: flag --lens-compact-tool-line; index.js: flag --lens-compact-lsp-status; index.js: flag --lens-hide-lsp-status; index.js: flag --lens-compact-widget; index.js: flag --no-lazy-tools; index.js: flag --lens-turn-end-madge; index.js: flag --no-knip; index.js: flag --no-jscpd; index.js: flag --no-madge; index.js: flag --no-gitleaks; index.js: flag --no-govulncheck; index.js: flag --no-dead-code; index.js: flag --no-complexity; index.js: flag --no-tool; index.js: renderers"
- }
- ],
- "stderr": "",
- "resources": {
- "extensions": 1,
- "skills": 4,
- "prompts": 0,
- "themes": 0
- },
- "result": "works, partly",
- "detail": "8 tools, tool-call hooks, 4 skills, message_end and context checked each run (a rewrite would stop it)",
- "ignored": [
- "event \"resources_discover\"",
- "event \"session_tree\"",
- "event \"tool_execution_end\"",
- "event \"turn_start\"",
- "event \"agent_end\"",
- "event \"turn_end\"",
- "event \"agent_settled\"",
- "command /lens-toggle",
- "command /lens-context-toggle",
- "command /lens-widget-toggle",
- "command /lens-tdi",
- "command /lens-map",
- "command /lens-health",
- "command /lens-perf",
- "command /lens-tools",
- "command /lens-allow-edit",
- "flag --no-lens",
- "flag --no-lsp",
- "flag --no-autoformat",
- "flag --immediate-format",
- "flag --no-autofix",
- "flag --no-tests",
- "flag --no-delta",
- "flag --lens-guard",
- "flag --lens-checkout-guard",
- "flag --no-opengrep",
- "flag --no-read-guard",
- "flag --no-lens-context",
- "flag --lens-turn-summary",
- "flag --lens-actionable-warnings",
- "flag --lens-actionable-warning-actions",
- "flag --lens-actionable-warning-autofix",
- "flag --lens-actionable-warning-all",
- "flag --lens-compact-tool-line",
- "flag --lens-compact-lsp-status",
- "flag --lens-hide-lsp-status",
- "flag --lens-compact-widget",
- "flag --no-lazy-tools",
- "flag --lens-turn-end-madge",
- "flag --no-knip",
- "flag --no-jscpd",
- "flag --no-madge",
- "flag --no-gitleaks",
- "flag --no-govulncheck",
- "flag --no-dead-code",
- "flag --no-complexity",
- "flag --no-tool",
- "renderers"
- ]
- },
{
"name": "pi-powerline-footer",
"version": "0.20.0",
- "monthly": 106500,
+ "monthly": 106751,
"description": "Powerline-style status bar extension for pi coding agent",
"ecosystem": "pi",
"skills": {
@@ -975,7 +865,7 @@
"message": "[pi] no host ui (print mode): service pi-host-ui is not available"
},
{
- "level": "warn",
+ "level": "info",
"message": "[pi] not available in yoagent, ignored: index.ts: event \"user_bash\"; index.ts: event \"model_select\"; index.ts: event \"thinking_level_select\"; index.ts: event \"session_tree\"; index.ts: event \"session_info_changed\"; index.ts: event \"agent_start\"; index.ts: event \"message_update\"; index.ts: event \"message_start\"; index.ts: event \"turn_end\"; index.ts: event \"session_before_compact\"; index.ts: event \"session_compact\"; index.ts: event \"session_compact_failed\"; index.ts: event \"agent_settled\"; index.ts: event \"agent_end\"; index.ts: command /cd; index.ts: command /reply; index.ts: command /queue; index.ts: command /powerline; index.ts: command /stash-history; index.ts: command /bash-mode; index.ts: command /powerline-perf; index.ts: command /bash-reset; index.ts: command /vibe"
}
],
@@ -1017,7 +907,7 @@
{
"name": "context-mode",
"version": "1.0.169",
- "monthly": 103613,
+ "monthly": 104211,
"description": "MCP plugin that saves 98% of your context window. Works with Claude Code, Gemini CLI, VS Code Copilot, OpenCode, and Codex CLI. Sandboxed code execution, FTS5 knowledge base, and intent-driven search.",
"ecosystem": "pi",
"skills": {
@@ -1055,7 +945,7 @@
"message": "[pi] no host ui (print mode): service pi-host-ui is not available"
},
{
- "level": "warn",
+ "level": "info",
"message": "[pi] not available in yoagent, ignored: extension.js: event \"before_provider_response\"; extension.js: event \"turn_end\"; extension.js: event \"session_before_compact\"; extension.js: event \"session_compact\"; extension.js: command /ctx-stats; extension.js: command /ctx-doctor"
}
],
@@ -1077,10 +967,120 @@
"command /ctx-doctor"
]
},
+ {
+ "name": "pi-lens",
+ "version": "4.4.3",
+ "monthly": 102007,
+ "description": "Real-time code feedback for pi — LSP, linters, formatters, type-checking, structural analysis & booboo",
+ "ecosystem": "pi",
+ "skills": {
+ "found": 4,
+ "loaded": [
+ "pi-lens-ast-grep",
+ "pi-lens-lsp-navigation",
+ "pi-lens-write-ast-grep-rule",
+ "pi-lens-write-tree-sitter-rule"
+ ],
+ "errors": []
+ },
+ "rows": [
+ {
+ "id": "pi",
+ "state": "active",
+ "error": null
+ }
+ ],
+ "without": [],
+ "loaded": true,
+ "tools": [
+ "effective_config",
+ "lens_diagnostics",
+ "module_report",
+ "pi_lens_activate_tools",
+ "project_report",
+ "read_enclosing",
+ "read_symbol",
+ "symbol_search"
+ ],
+ "note_chars": 0,
+ "logs": [
+ {
+ "level": "debug",
+ "message": "[pi] loaded index.js: events resources_discover, session_start, session_tree, tool_call, tool_result, tool_execution_end, turn_start, agent_end, turn_end, agent_settled, session_shutdown, message_end, context; tools lens_diagnostics, symbol_search, effective_config, project_report, module_report, read_symbol, read_enclosing, pi_lens_activate_tools, ast_grep_search, ast_grep_replace, ast_grep_outline, lsp_navigation, lens_diagnostic_mark"
+ },
+ {
+ "level": "debug",
+ "message": "[pi] no host ui (print mode): service pi-host-ui is not available"
+ },
+ {
+ "level": "info",
+ "message": "[pi] not available in yoagent, ignored: index.js: event \"resources_discover\"; index.js: event \"session_tree\"; index.js: event \"tool_execution_end\"; index.js: event \"turn_start\"; index.js: event \"agent_end\"; index.js: event \"turn_end\"; index.js: event \"agent_settled\"; index.js: command /lens-toggle; index.js: command /lens-context-toggle; index.js: command /lens-widget-toggle; index.js: command /lens-tdi; index.js: command /lens-map; index.js: command /lens-health; index.js: command /lens-perf; index.js: command /lens-tools; index.js: command /lens-allow-edit; index.js: flag --no-lens; index.js: flag --no-lsp; index.js: flag --no-autoformat; index.js: flag --immediate-format; index.js: flag --no-autofix; index.js: flag --no-tests; index.js: flag --no-delta; index.js: flag --lens-guard; index.js: flag --lens-checkout-guard; index.js: flag --no-opengrep; index.js: flag --no-read-guard; index.js: flag --no-lens-context; index.js: flag --lens-turn-summary; index.js: flag --lens-actionable-warnings; index.js: flag --lens-actionable-warning-actions; index.js: flag --lens-actionable-warning-autofix; index.js: flag --lens-actionable-warning-all; index.js: flag --lens-compact-tool-line; index.js: flag --lens-compact-lsp-status; index.js: flag --lens-hide-lsp-status; index.js: flag --lens-compact-widget; index.js: flag --no-lazy-tools; index.js: flag --lens-turn-end-madge; index.js: flag --no-knip; index.js: flag --no-jscpd; index.js: flag --no-madge; index.js: flag --no-gitleaks; index.js: flag --no-govulncheck; index.js: flag --no-dead-code; index.js: flag --no-complexity; index.js: flag --no-tool; index.js: renderers"
+ }
+ ],
+ "stderr": "",
+ "resources": {
+ "extensions": 1,
+ "skills": 4,
+ "prompts": 0,
+ "themes": 0
+ },
+ "result": "works, partly",
+ "detail": "8 tools, tool-call hooks, 4 skills, message_end and context checked each run (a rewrite would stop it)",
+ "ignored": [
+ "event \"resources_discover\"",
+ "event \"session_tree\"",
+ "event \"tool_execution_end\"",
+ "event \"turn_start\"",
+ "event \"agent_end\"",
+ "event \"turn_end\"",
+ "event \"agent_settled\"",
+ "command /lens-toggle",
+ "command /lens-context-toggle",
+ "command /lens-widget-toggle",
+ "command /lens-tdi",
+ "command /lens-map",
+ "command /lens-health",
+ "command /lens-perf",
+ "command /lens-tools",
+ "command /lens-allow-edit",
+ "flag --no-lens",
+ "flag --no-lsp",
+ "flag --no-autoformat",
+ "flag --immediate-format",
+ "flag --no-autofix",
+ "flag --no-tests",
+ "flag --no-delta",
+ "flag --lens-guard",
+ "flag --lens-checkout-guard",
+ "flag --no-opengrep",
+ "flag --no-read-guard",
+ "flag --no-lens-context",
+ "flag --lens-turn-summary",
+ "flag --lens-actionable-warnings",
+ "flag --lens-actionable-warning-actions",
+ "flag --lens-actionable-warning-autofix",
+ "flag --lens-actionable-warning-all",
+ "flag --lens-compact-tool-line",
+ "flag --lens-compact-lsp-status",
+ "flag --lens-hide-lsp-status",
+ "flag --lens-compact-widget",
+ "flag --no-lazy-tools",
+ "flag --lens-turn-end-madge",
+ "flag --no-knip",
+ "flag --no-jscpd",
+ "flag --no-madge",
+ "flag --no-gitleaks",
+ "flag --no-govulncheck",
+ "flag --no-dead-code",
+ "flag --no-complexity",
+ "flag --no-tool",
+ "renderers"
+ ]
+ },
{
"name": "@dietrichgebert/ponytail",
"version": "5.1.0",
- "monthly": 97104,
+ "monthly": 97477,
"description": "Lazy senior dev mode for AI agents. The best code is the code you never wrote.",
"ecosystem": "pi",
"skills": {
@@ -1120,7 +1120,7 @@
"message": "[pi info] Ponytail loaded: full"
},
{
- "level": "warn",
+ "level": "info",
"message": "[pi] not available in yoagent, ignored: index.js: event \"session_tree\"; index.js: event \"agent_start\"; index.js: event \"agent_end\"; index.js: command /ponytail; index.js: command /ponytail-review; index.js: command /ponytail-audit; index.js: command /ponytail-gain; index.js: command /ponytail-debt; index.js: command /ponytail-help"
}
],
@@ -1177,7 +1177,7 @@
"message": "[pi] no host ui (print mode): service pi-host-ui is not available"
},
{
- "level": "warn",
+ "level": "info",
"message": "[pi] not available in yoagent, ignored: index.js: command /langsmith-tracing"
}
],
@@ -1197,7 +1197,7 @@
{
"name": "@narumitw/pi-usage",
"version": "0.65.0",
- "monthly": 84271,
+ "monthly": 84983,
"description": "Pi extension that shows current-account usage and DeepSeek API balance for supported providers.",
"ecosystem": "pi",
"skills": {
@@ -1239,8 +1239,8 @@
"dsh": [
{
"name": "dshmarket",
- "version": "1.66.15",
- "monthly": 561135,
+ "version": "1.66.17",
+ "monthly": 570846,
"description": "Visual plugin market inside DeepSeek Harness — browse, search, and one-click install community plugins. · DSH 可视化插件市场:逛一逛,点一下,装好。",
"ecosystem": "dsh",
"services": {
@@ -1249,42 +1249,111 @@
},
"rows": [
{
- "id": "dsh-market",
+ "id": "dsh-fs",
"state": "active",
"error": null
- }
- ],
- "tools": [],
- "guidance_chars": 0,
- "logs": [],
- "stderr": "",
- "client": true,
- "peers": [
- "@deepseek-ai/dsh-settings"
- ],
- "inject": [],
- "importErrors": {},
- "result": "not applicable",
- "detail": "starts, but adds no tools or guidance (UI, settings or server features). Its web UI needs DSH's web client."
- },
- {
+ },
+ {
+ "id": "dsh-attachments",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-credentials",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-storage",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-session-persistence",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skills",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skill-filesystem",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-market",
+ "state": "active",
+ "error": null
+ }
+ ],
+ "tools": [],
+ "guidance_chars": 0,
+ "logs": [],
+ "stderr": "",
+ "client": true,
+ "peers": [
+ "@deepseek-ai/dsh-settings"
+ ],
+ "inject": [],
+ "importErrors": {},
+ "result": "not applicable",
+ "detail": "starts, but adds no tools or guidance (UI, settings or server features). Its web UI needs DSH's web client."
+ },
+ {
"name": "@michengai/dsh-skills-manager",
- "version": "1.1.13",
- "monthly": 201182,
+ "version": "1.1.17",
+ "monthly": 202149,
"description": "DSH Skills Manager — 在 DeepSeek Harness 中统一加载并安全管理本机 Agent Skills · Load and safely manage local Agent Skills in DSH",
"ecosystem": "dsh",
"services": {
"present": [
+ "skills",
"tools"
],
"missing": [
"webServer",
- "webRuntime",
- "skills",
"sessions"
]
},
"rows": [
+ {
+ "id": "dsh-fs",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-attachments",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-credentials",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-storage",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-session-persistence",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skills",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skill-filesystem",
+ "state": "active",
+ "error": null
+ },
{
"id": "skills-manager",
"state": "active",
@@ -1307,19 +1376,19 @@
],
"inject": [
"webServer",
- "webRuntime",
"skills",
"tools",
"sessions"
],
"importErrors": {},
+ "installNote": "installed without npm resolving its peers",
"result": "needs a DSH host",
- "detail": "waits for services yoagent's DSH runtime does not run: webServer, webRuntime, skills, sessions. Its web UI needs DSH's web client."
+ "detail": "waits for services yoagent's DSH runtime does not run: webServer, sessions. Its web UI needs DSH's web client. (installed without npm resolving its peers)"
},
{
"name": "@michengai/dsh-archive-manager",
- "version": "1.0.16",
- "monthly": 180612,
+ "version": "1.0.17",
+ "monthly": 182870,
"description": "归档、恢复、收藏和永久删除会话,并诊断损坏的会话日志。 · Archive, restore, favorite, and permanently delete sessions, and diagnose damaged session logs.",
"ecosystem": "dsh",
"services": {
@@ -1327,10 +1396,45 @@
"missing": []
},
"rows": [
+ {
+ "id": "dsh-fs",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-attachments",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-credentials",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-storage",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-session-persistence",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skills",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skill-filesystem",
+ "state": "active",
+ "error": null
+ },
{
"id": "ui-workspace-archive-manager",
"state": "unresolved",
- "error": "cannot load \"@michengai/dsh-archive-manager\": Error: Cannot find package '@deepseek-ai/dsh-workspace' imported from /private/var/folders/3k/_tx8d93x0yd6km99qqlv6qgm0000gn/T/eco/w/dsh/@michengai__dsh-archive-manager/node_modules/@michengai/dsh-archive-manager/lib/workspace.js"
+ "error": "cannot load \"@michengai/dsh-archive-manager\": Error: Cannot find package '@deepseek-ai/dsh-workspace' imported from /tmp/yoagent-matrix-eqeP5X/dsh/@michengai__dsh-archive-manager/node_modules/@michengai/dsh-archive-manager/lib/workspace.js"
}
],
"tools": [],
@@ -1359,7 +1463,7 @@
],
"inject": [],
"importErrors": {
- "ui-workspace-archive-manager": "Cannot find package '@deepseek-ai/dsh-workspace' imported from /private/var/folders/3k/_tx8d93x0yd6km99qqlv6qgm0000gn/T/eco/w/dsh/@michengai__dsh-archive-manager/node_modules/@michengai/dsh-archive-manager/lib/workspace.js"
+ "ui-workspace-archive-manager": "Cannot find package '@deepseek-ai/dsh-workspace' imported from /tmp/yoagent-matrix-eqeP5X/dsh/@michengai__dsh-archive-manager/node_modules/@michengai/dsh-archive-manager/lib/workspace.js"
},
"installNote": "installed without its DSH peers (@deepseek-ai/dsh-workspace@0.2.0-rc.2, @deepseek-ai/dsh-spill-local@0.2.0-rc.2, @deepseek-ai/dsh-client-store@0.2.0-rc.2, @deepseek-ai/dsh-client-locale@0.2.0-rc.2, @deepseek-ai/dsh-client-runtime@0.2.0-rc.2, @deepseek-ai/dsh-host-webserver@0.2.0-rc.2, @deepseek-ai/dsh-storage-domain@0.2.0-rc.2, @deepseek-ai/dsh-typert-registry@0.2.0-rc.2, @deepseek-ai/dsh-client-connection@0.2.0-rc.2, @deepseek-ai/dsh-client-ui-sidebar@0.2.0-rc.2, @deepseek-ai/dsh-client-ui-workspace@0.2.0-rc.2, @deepseek-ai/dsh-client-ui-primitives@0.2.0-rc.2, @deepseek-ai/dsh-client-ui-conversation@0.2.0-rc.2, @deepseek-ai/dsh-session-format-catalog@0.2.0-rc.2, @deepseek-ai/dsh-session-projection-cache@0.2.0-rc.2)",
"result": "needs a DSH host",
@@ -1367,8 +1471,8 @@
},
{
"name": "dsh-whale-widget",
- "version": "0.3.18",
- "monthly": 146796,
+ "version": "0.4.2",
+ "monthly": 154055,
"description": "DSH Web 界面右下角的 DeepSeek 余额小鲸鱼挂件:余额/今日已用/峰谷定价、自定义泡泡点击序列(文本/余额/今日/峰谷/图片/随机语句与并列加权选择)、逐行样式与字体、悬浮快捷编辑、音效与每轮消耗、自定义角色/动图/音效、吸附与翻转自定义",
"ecosystem": "dsh",
"services": {
@@ -1376,6 +1480,41 @@
"missing": []
},
"rows": [
+ {
+ "id": "dsh-fs",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-attachments",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-credentials",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-storage",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-session-persistence",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skills",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skill-filesystem",
+ "state": "active",
+ "error": null
+ },
{
"id": "dsh-whale-widget",
"state": "active",
@@ -1407,6 +1546,41 @@
]
},
"rows": [
+ {
+ "id": "dsh-fs",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-attachments",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-credentials",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-storage",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-session-persistence",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skills",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skill-filesystem",
+ "state": "active",
+ "error": null
+ },
{
"id": "model-proxy",
"state": "active",
@@ -1431,8 +1605,8 @@
},
{
"name": "dsh-cost-meter",
- "version": "1.8.20",
- "monthly": 108950,
+ "version": "1.8.22",
+ "monthly": 108645,
"description": "DeepSeek Harness 会话费用统计插件:本会话成本、当日费用、历史记录与官方价格同步,支持多厂商多模型价格计费(内置 170+ 模型 ID 价格目录与自动匹配)、主流 Coding Plan 订阅额度查询与显示(11 家,含小米 MiMo Token Plan 控制台 Cookie 查询、SCNet Token Plan 本地 Credits 计量与火山方舟 Volcano Ark Coding Plan AK/SK 签名查询)、自定义 Provider 余额查询(可配任意 HTTP 端点)与",
"ecosystem": "dsh",
"services": {
@@ -1440,6 +1614,41 @@
"missing": []
},
"rows": [
+ {
+ "id": "dsh-fs",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-attachments",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-credentials",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-storage",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-session-persistence",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skills",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skill-filesystem",
+ "state": "active",
+ "error": null
+ },
{
"id": "cost-meter",
"state": "active",
@@ -1462,19 +1671,55 @@
},
{
"name": "@xmanrui/dsh-im",
- "version": "4.38.0",
- "monthly": 62925,
+ "version": "4.38.1",
+ "monthly": 62286,
"description": "把微信、飞书、企微、钉钉、QQ、Telegram、WhatsApp、Slack、Discord、Matrix接入DSH。 Connect Telegram, WhatsApp, Slack, Discord, Matrix, WeChat, Feishu, WeCom, DingTalk, and QQ to DSH.",
"ecosystem": "dsh",
"services": {
- "present": [],
+ "present": [
+ "credentials"
+ ],
"missing": [
"connection",
- "credentials",
"typertGateway"
]
},
"rows": [
+ {
+ "id": "dsh-fs",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-attachments",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-credentials",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-storage",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-session-persistence",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skills",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skill-filesystem",
+ "state": "active",
+ "error": null
+ },
{
"id": "xmanrui-dsh-im",
"state": "active",
@@ -1494,11 +1739,11 @@
],
"importErrors": {},
"result": "needs a DSH host",
- "detail": "waits for services yoagent's DSH runtime does not run: connection, credentials, typertGateway. Its web UI needs DSH's web client."
+ "detail": "waits for services yoagent's DSH runtime does not run: connection, typertGateway. Its web UI needs DSH's web client."
},
{
"name": "@nanmicoder/dsh-agent-teams",
- "version": "0.1.22",
+ "version": "0.1.23",
"monthly": 55140,
"description": "AgentTeams for DeepSeek Harness: multi-agent team collaboration (captain, members, tasks with dependencies, messaging) driven by natural language, with a tree monitor in the web GUI",
"ecosystem": "dsh",
@@ -1514,6 +1759,41 @@
]
},
"rows": [
+ {
+ "id": "dsh-fs",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-attachments",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-credentials",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-storage",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-session-persistence",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skills",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skill-filesystem",
+ "state": "active",
+ "error": null
+ },
{
"id": "agent-teams",
"state": "active",
@@ -1567,20 +1847,55 @@
"ecosystem": "dsh",
"services": {
"present": [
- "tools"
- ],
- "missing": [
+ "tools",
"attachments",
"credentials",
"fs",
"skills",
- "sessionPersistence",
+ "sessionPersistence"
+ ],
+ "missing": [
"settings"
]
},
"rows": [
{
- "id": "image-generation",
+ "id": "dsh-fs",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-attachments",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-credentials",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-storage",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-session-persistence",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skills",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skill-filesystem",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "image-generation",
"state": "active",
"error": null
}
@@ -1617,12 +1932,12 @@
"importErrors": {},
"installNote": "installed without npm resolving its peers",
"result": "needs a DSH host",
- "detail": "waits for services yoagent's DSH runtime does not run: attachments, credentials, fs, skills, sessionPersistence, settings. Its web UI needs DSH's web client. (installed without npm resolving its peers)"
+ "detail": "waits for services yoagent's DSH runtime does not run: settings. Its web UI needs DSH's web client. (installed without npm resolving its peers)"
},
{
"name": "dsh-univer-office",
"version": "0.3.7",
- "monthly": 49557,
+ "monthly": 50677,
"description": "DSH × Univer integration with a bundled collaboration Gateway and Viewer: inline previews, live floating Worktree windows, and session-end review actions in DeepSeek Harness.",
"ecosystem": "dsh",
"services": {
@@ -1630,6 +1945,41 @@
"missing": []
},
"rows": [
+ {
+ "id": "dsh-fs",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-attachments",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-credentials",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-storage",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-session-persistence",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skills",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skill-filesystem",
+ "state": "active",
+ "error": null
+ },
{
"id": "univer",
"state": "active",
@@ -1647,6 +1997,7 @@
"univer_new",
"univer_print_pdf",
"univer_resources",
+ "univer_screenshot",
"univer_status",
"univer_unit",
"univer_worktree"
@@ -1667,15 +2018,15 @@
"inject": [],
"importErrors": {},
"result": "works, partly",
- "detail": "13 tools",
+ "detail": "14 tools",
"ignored": [
"its web UI (DSH's web client)"
]
},
{
"name": "dsh-mnemon",
- "version": "0.5.27",
- "monthly": 44342,
+ "version": "0.5.28",
+ "monthly": 45540,
"description": "Composable, view-based memory for DeepSeek Harness. Pluggable sources and strategies, with layered memory out of the box.",
"ecosystem": "dsh",
"services": {
@@ -1685,6 +2036,41 @@
]
},
"rows": [
+ {
+ "id": "dsh-fs",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-attachments",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-credentials",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-storage",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-session-persistence",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skills",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skill-filesystem",
+ "state": "active",
+ "error": null
+ },
{
"id": "mnemon-bundle",
"state": "disabled",
@@ -1708,10 +2094,168 @@
"result": "needs a DSH host",
"detail": "waits for services yoagent's DSH runtime does not run: loader. Its web UI needs DSH's web client."
},
+ {
+ "name": "dsh-plugin-wallpaper-engine",
+ "version": "1.3.2",
+ "monthly": 43299,
+ "description": "Wallpaper Engine backgrounds for the DSH web GUI: render your local Wallpaper Engine wallpapers behind the chat — Scene and Web in real time through the bundled WebWallGL engine, Video played directly — with iOS-style liquid glass, adjustable blur/scrim/b",
+ "ecosystem": "dsh",
+ "services": {
+ "present": [],
+ "missing": [
+ "webServer"
+ ]
+ },
+ "rows": [
+ {
+ "id": "dsh-fs",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-attachments",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-credentials",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-storage",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-session-persistence",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skills",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skill-filesystem",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "wallpaper-engine",
+ "state": "active",
+ "error": null
+ }
+ ],
+ "tools": [],
+ "guidance_chars": 0,
+ "logs": [],
+ "stderr": "",
+ "client": true,
+ "peers": [
+ "@deepseek-ai/dsh-client-runtime",
+ "@deepseek-ai/dsh-client-ui-slots",
+ "@deepseek-ai/dsh-host-webserver"
+ ],
+ "inject": [
+ "webServer"
+ ],
+ "importErrors": {},
+ "installNote": "installed without its DSH peers (@deepseek-ai/dsh-client-runtime@0.2.0-rc.2, @deepseek-ai/dsh-host-webserver@0.2.0-rc.2, @deepseek-ai/dsh-client-ui-slots@0.2.0-rc.2)",
+ "result": "needs a DSH host",
+ "detail": "waits for services yoagent's DSH runtime does not run: webServer. Its web UI needs DSH's web client. (installed without its DSH peers (@deepseek-ai/dsh-client-runtime@0.2.0-rc.2, @deepseek-ai/dsh-host-webserver@0.2.0-rc.2, @deepseek-ai/dsh-client-ui-slots@0.2.0-rc.2))"
+ },
+ {
+ "name": "dsh-free-search",
+ "version": "0.8.9",
+ "monthly": 42419,
+ "description": "Free web search for DeepSeek Harness: 24 engines (Bing/DuckDuckGo/AnySearch/SearXNG/Exa/Tavily/Keenable/Firecrawl/Parallel keyless; Zhihu global/site via MCP and Perplexity/SerpBase/DeepSeek/You.com/Baidu/Kimi/Aliyun/Doubao with key; OpenAI/Gemini/Claude ",
+ "ecosystem": "dsh",
+ "services": {
+ "present": [
+ "web"
+ ],
+ "missing": []
+ },
+ "rows": [
+ {
+ "id": "dsh-fs",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-attachments",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-credentials",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-storage",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-session-persistence",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skills",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skill-filesystem",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "web-search-free",
+ "state": "active",
+ "error": null
+ }
+ ],
+ "tools": [
+ "advanced_search",
+ "cache_search",
+ "domain_search",
+ "free_search_test",
+ "multi_search",
+ "platform_search",
+ "research",
+ "video_search",
+ "weather"
+ ],
+ "guidance_chars": 1509,
+ "logs": [],
+ "stderr": "",
+ "client": true,
+ "peers": [
+ "@deepseek-ai/dsh-client-ui-commands",
+ "@deepseek-ai/dsh-client-ui-plugin-manager",
+ "@deepseek-ai/dsh-client-ui-renderer",
+ "@deepseek-ai/dsh-settings",
+ "@deepseek-ai/dsh-tools"
+ ],
+ "inject": [
+ "web"
+ ],
+ "importErrors": {},
+ "result": "works, partly",
+ "detail": "9 tools, prompt guidance",
+ "ignored": [
+ "its web UI (DSH's web client)"
+ ]
+ },
{
"name": "@liustack/modsearch",
"version": "5.10.6",
- "monthly": 43116,
+ "monthly": 42230,
"description": "The strongest free web search plugin for coding agents. Plug-in web search, X search, and page fetch for models without native web access. Free out of the box: no signup, no API key (Firecrawl keyless, 1,000 free credits/month)",
"ecosystem": "dsh",
"services": {
@@ -1722,6 +2266,41 @@
"missing": []
},
"rows": [
+ {
+ "id": "dsh-fs",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-attachments",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-credentials",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-storage",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-session-persistence",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skills",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skill-filesystem",
+ "state": "active",
+ "error": null
+ },
{
"id": "modsearch",
"state": "failed",
@@ -1749,16 +2328,52 @@
"description": "吃白饭的蓝色大肥鱼,赖在 DeepSeek Harness 里不走了。平时爱玩魔方、爱吃各种零食、偶尔打个盹,闲不住就在桌面上溜达两圈,被你拖来甩去也照旧赖着;你忙起来它跟着忙前忙后,也会帮你打理余额钱包,闲下来爱碎碎念,还乐意陪你唠两句。",
"ecosystem": "dsh",
"services": {
- "present": [],
+ "present": [
+ "credentials"
+ ],
"missing": [
"webServer",
"agentDefaultModel",
- "credentials",
"llm",
"commands"
]
},
"rows": [
+ {
+ "id": "dsh-fs",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-attachments",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-credentials",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-storage",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-session-persistence",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skills",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skill-filesystem",
+ "state": "active",
+ "error": null
+ },
{
"id": "dsh-pet",
"state": "active",
@@ -1790,7 +2405,7 @@
],
"importErrors": {},
"result": "needs a DSH host",
- "detail": "waits for services yoagent's DSH runtime does not run: webServer, agentDefaultModel, credentials, llm, commands. Its web UI needs DSH's web client."
+ "detail": "waits for services yoagent's DSH runtime does not run: webServer, agentDefaultModel, llm, commands. Its web UI needs DSH's web client."
},
{
"name": "@dfy-plugins/dsh-bundle",
@@ -1800,23 +2415,58 @@
"ecosystem": "dsh",
"services": {
"present": [
- "tools"
+ "attachments",
+ "tools",
+ "credentials",
+ "fs",
+ "skills",
+ "sessionPersistence"
],
"missing": [
"webServer",
"settings",
"workspaceRegistry",
"llm",
- "attachments",
"agents",
- "credentials",
- "fs",
- "skills",
- "sessionPersistence",
"agentPresets"
]
},
"rows": [
+ {
+ "id": "dsh-fs",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-attachments",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-credentials",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-storage",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-session-persistence",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skills",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skill-filesystem",
+ "state": "active",
+ "error": null
+ },
{
"id": "wallpaper",
"state": "active",
@@ -1858,7 +2508,9 @@
"error": null
}
],
- "tools": [],
+ "tools": [
+ "dfy_visualize_render"
+ ],
"guidance_chars": 0,
"logs": [],
"stderr": "",
@@ -1880,107 +2532,54 @@
],
"importErrors": {},
"result": "needs a DSH host",
- "detail": "waits for services yoagent's DSH runtime does not run: webServer, settings, workspaceRegistry, llm, attachments, agents, credentials, fs, skills, sessionPersistence, agentPresets."
+ "detail": "waits for services yoagent's DSH runtime does not run: webServer, settings, workspaceRegistry, llm, agents, agentPresets."
},
{
- "name": "dsh-plugin-wallpaper-engine",
- "version": "1.3.1",
- "monthly": 41148,
- "description": "Wallpaper Engine backgrounds for the DSH web GUI: render your local Wallpaper Engine wallpapers behind the chat — Scene and Web in real time through the bundled WebWallGL engine, Video played directly — with iOS-style liquid glass, adjustable blur/scrim/b",
+ "name": "@roarpeng/graphflow",
+ "version": "2.3.0",
+ "monthly": 36397,
+ "description": "Local-first memory & context harness for coding agents",
"ecosystem": "dsh",
"services": {
"present": [],
- "missing": [
- "webServer"
- ]
+ "missing": []
},
"rows": [
{
- "id": "wallpaper-engine",
+ "id": "dsh-fs",
"state": "active",
"error": null
- }
- ],
- "tools": [],
- "guidance_chars": 0,
- "logs": [],
- "stderr": "",
- "client": true,
- "peers": [
- "@deepseek-ai/dsh-client-runtime",
- "@deepseek-ai/dsh-client-ui-slots",
- "@deepseek-ai/dsh-host-webserver"
- ],
- "inject": [
- "webServer"
- ],
- "importErrors": {},
- "installNote": "installed without its DSH peers (@deepseek-ai/dsh-client-runtime@0.2.0-rc.2, @deepseek-ai/dsh-host-webserver@0.2.0-rc.2, @deepseek-ai/dsh-client-ui-slots@0.2.0-rc.2)",
- "result": "needs a DSH host",
- "detail": "waits for services yoagent's DSH runtime does not run: webServer. Its web UI needs DSH's web client. (installed without its DSH peers (@deepseek-ai/dsh-client-runtime@0.2.0-rc.2, @deepseek-ai/dsh-host-webserver@0.2.0-rc.2, @deepseek-ai/dsh-client-ui-slots@0.2.0-rc.2))"
- },
- {
- "name": "dsh-free-search",
- "version": "0.8.5",
- "monthly": 40197,
- "description": "Free web search for DeepSeek Harness: 24 engines (Bing/DuckDuckGo/AnySearch/SearXNG/Exa/Tavily/Keenable/Firecrawl/Parallel keyless; Zhihu global/site via MCP and Perplexity/SerpBase/DeepSeek/You.com/Baidu/Kimi/Aliyun/Doubao with key; OpenAI/Gemini/Claude ",
- "ecosystem": "dsh",
- "services": {
- "present": [
- "web"
- ],
- "missing": []
- },
- "rows": [
+ },
{
- "id": "web-search-free",
+ "id": "dsh-attachments",
"state": "active",
"error": null
- }
- ],
- "tools": [
- "advanced_search",
- "cache_search",
- "domain_search",
- "free_search_test",
- "multi_search",
- "platform_search",
- "research",
- "video_search",
- "weather"
- ],
- "guidance_chars": 1509,
- "logs": [],
- "stderr": "",
- "client": true,
- "peers": [
- "@deepseek-ai/dsh-client-ui-commands",
- "@deepseek-ai/dsh-client-ui-plugin-manager",
- "@deepseek-ai/dsh-client-ui-renderer",
- "@deepseek-ai/dsh-settings",
- "@deepseek-ai/dsh-tools"
- ],
- "inject": [
- "web"
- ],
- "importErrors": {},
- "result": "works, partly",
- "detail": "9 tools, prompt guidance",
- "ignored": [
- "its web UI (DSH's web client)"
- ]
- },
- {
- "name": "@roarpeng/graphflow",
- "version": "2.2.0",
- "monthly": 34657,
- "description": "Local-first memory & context harness for coding agents",
- "ecosystem": "dsh",
- "services": {
- "present": [],
- "missing": []
- },
- "rows": [
+ },
+ {
+ "id": "dsh-credentials",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-storage",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-session-persistence",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skills",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skill-filesystem",
+ "state": "active",
+ "error": null
+ },
{
"id": "mcp-graphflow",
"state": "unresolved",
@@ -2000,15 +2599,15 @@
"peers": [],
"inject": [],
"importErrors": {
- "mcp-graphflow": "Cannot find module '@deepseek-ai/dsh-mcp-client'\nRequire stack:\n- /var/folders/3k/_tx8d93x0yd6km99qqlv6qgm0000gn/T/eco/w/dsh/@roarpeng__graphflow/package.json"
+ "mcp-graphflow": "Cannot find module '@deepseek-ai/dsh-mcp-client'\nRequire stack:\n- /tmp/yoagent-matrix-eqeP5X/dsh/@roarpeng__graphflow/package.json"
},
"result": "needs a DSH host",
"detail": "loads DSH packages an agent library does not ship: @deepseek-ai/dsh-mcp-client. Its web UI needs DSH's web client."
},
{
"name": "dsh-dream-skin",
- "version": "10.10.0",
- "monthly": 33804,
+ "version": "10.12.1",
+ "monthly": 35393,
"description": "DeepSeek Harness 换肤插件(Dream Skin for DSH):8 套 iOS / Linear 式清透冷调的高质感主题 + 弥散光壁纸 + 每皮肤智能背景 + 强调色 + 主题包分享,把换肤做成材质与配色克制的高级感工艺,而非贴图。Works in native DSH Web and third-party desktop clients (DSH Desktop): 8 original premium themes, glass materials, wallpaper 2.0",
"ecosystem": "dsh",
"services": {
@@ -2019,6 +2618,41 @@
]
},
"rows": [
+ {
+ "id": "dsh-fs",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-attachments",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-credentials",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-storage",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-session-persistence",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skills",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skill-filesystem",
+ "state": "active",
+ "error": null
+ },
{
"id": "dream-skin",
"state": "active",
@@ -2055,22 +2689,58 @@
"ecosystem": "dsh",
"services": {
"present": [
- "tools"
- ],
- "missing": [
+ "tools",
"fs",
"skills",
"sessionPersistence"
- ]
+ ],
+ "missing": []
},
"rows": [
+ {
+ "id": "dsh-fs",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-attachments",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-credentials",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-storage",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-session-persistence",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skills",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skill-filesystem",
+ "state": "active",
+ "error": null
+ },
{
"id": "visualize",
"state": "active",
"error": null
}
],
- "tools": [],
+ "tools": [
+ "dfy_visualize_render"
+ ],
"guidance_chars": 0,
"logs": [],
"stderr": "",
@@ -2092,8 +2762,11 @@
],
"importErrors": {},
"installNote": "installed without npm resolving its peers",
- "result": "needs a DSH host",
- "detail": "waits for services yoagent's DSH runtime does not run: fs, skills, sessionPersistence. Its web UI needs DSH's web client. (installed without npm resolving its peers)"
+ "result": "works, partly",
+ "detail": "1 tool (installed without npm resolving its peers)",
+ "ignored": [
+ "its web UI (DSH's web client)"
+ ]
},
{
"name": "dsh-find-plugin",
@@ -2108,6 +2781,41 @@
"missing": []
},
"rows": [
+ {
+ "id": "dsh-fs",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-attachments",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-credentials",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-storage",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-session-persistence",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skills",
+ "state": "active",
+ "error": null
+ },
+ {
+ "id": "dsh-skill-filesystem",
+ "state": "active",
+ "error": null
+ },
{
"id": "find-dsh-plugin",
"state": "active",
diff --git a/docs/evals/plugin-compatibility.md b/docs/evals/plugin-compatibility.md
index 6b7b2ca..645329f 100644
--- a/docs/evals/plugin-compatibility.md
+++ b/docs/evals/plugin-compatibility.md
@@ -2,7 +2,7 @@
How the most-downloaded third-party plugins of two agent ecosystems load in
a yoagent agent, unchanged, through yoagent-rutis's adapters. Generated by
-`scripts/ecosystem-matrix.mjs` on 2026-10-11 and 2026-10-10; raw results in
+`scripts/ecosystem-matrix.mjs` on 2026-10-12; raw results in
[`plugin-compatibility.json`](plugin-compatibility.json).
**What was checked.** Each package is installed on its own from npm and
@@ -13,7 +13,7 @@ every tool was exercised.
**In short.**
- **pi:** 12 of 20 give an agent run tools, tool-call or input hooks, or prompt additions (3 fully). 5 are refused because they hook what yoagent cannot enforce, or their startup needs pi app internals; 3 register nothing usable as installed. Their skills: all 118 (in 7 packages) load with yoagent's skills loader.
-- **DSH:** 3 of 20 give an agent tools or prompt guidance. 13 need DSH's own app (its sessions, web server, model layer); 3 add nothing an agent uses (UI or settings). DSH's popular plugins mostly extend the DSH app rather than add agent tools.
+- **DSH:** 4 of 20 give an agent tools or prompt guidance, with DSH's own host services loaded (files, attachments, credentials, storage, session persistence, skills: `plugins/dsh/host-services.json`). 12 need DSH's own app (its web server, model layer, agents, settings, …); 3 add nothing an agent uses (UI or settings). 1 fails to load or install (the table says why). DSH's popular plugins mostly extend the DSH app rather than add agent tools.
**Results.**
- **works**: loads; everything it registers maps to yoagent.
@@ -42,54 +42,54 @@ every tool was exercised.
## pi packages
-The 20 most-downloaded packages (by monthly downloads, among the first 1000 results of npm's search) with the `pi-package` keyword, through the pi adapter (pi 1.1.0), on 2026-10-11. 9 works, partly · 5 refused · 3 nothing to use · 3 works.
+The 20 most-downloaded packages (by monthly downloads, among the first 1000 results of npm's search) with the `pi-package` keyword, through the pi adapter (pi 1.1.0), on 2026-10-12. 9 works, partly · 5 refused · 3 nothing to use · 3 works.
| # | Package | Downloads / month | Result | What yoagent gets |
|---|---|---:|---|---|
-| 1 | [pi-mcp-adapter](https://www.npmjs.com/package/pi-mcp-adapter) 5.2.0 | 1,606,843 | works, partly | 1 tool, tool-call hooks, input hooks
ignored: event "mcp_servers_change"; event "resources_discover"; event "session_tree"; command /mcp-adapter; command /mcp; command /mcp-auth; flag --mcp-config |
-| 2 | [billion-context](https://www.npmjs.com/package/billion-context) 0.1.192 | 936,104 | refused | pi extensions handle events yoagent never fires, which would decide or rewrite what the agent does: pi-native.js: event "before_provider_headers"; pi-native.js: event "before_provider_request" (list an event in allowUnmapped to accept that it goes unenforced) |
-| 3 | [pi-web-access](https://www.npmjs.com/package/pi-web-access) 0.38.0 | 693,533 | works, partly | 4 tools, tool-call hooks
ignored: event "agent_settled"; event "session_tree"; command /websearch; command /curator; command /google-account; command /search; shortcut ctrl+shift+s; shortcut ctrl+shift+w |
-| 4 | [pi-subagents](https://www.npmjs.com/package/pi-subagents) 0.77.0 | 622,053 | works, partly | 3 tools, tool-call hooks, input hooks, 2 skills
ignored: event "turn_end"; event "model_select"; event "agent_end"; event "session_before_switch"; event "session_before_fork"; event "session_compact"; event "session_tree"; event "agent_start"; event "message_start"; event "agent_settled"; event "session_before_compact"; command /subagents-watchdog; comman |
+| 1 | [pi-mcp-adapter](https://www.npmjs.com/package/pi-mcp-adapter) 5.2.0 | 1,608,890 | works, partly | 1 tool, tool-call hooks, input hooks
ignored: event "mcp_servers_change"; event "resources_discover"; event "session_tree"; command /mcp-adapter; command /mcp; command /mcp-auth; flag --mcp-config |
+| 2 | [billion-context](https://www.npmjs.com/package/billion-context) 0.1.195 | 1,072,115 | refused | pi extensions handle events yoagent never fires, which would decide or rewrite what the agent does: pi-native.js: event "before_provider_headers"; pi-native.js: event "before_provider_request" (list an event in allowUnmapped to accept that it goes unenforced) |
+| 3 | [pi-web-access](https://www.npmjs.com/package/pi-web-access) 0.39.0 | 720,509 | works, partly | 4 tools, tool-call hooks
ignored: event "agent_settled"; event "session_tree"; command /websearch; command /curator; command /google-account; command /search; shortcut ctrl+shift+s; shortcut ctrl+shift+w |
+| 4 | [pi-subagents](https://www.npmjs.com/package/pi-subagents) 0.77.0 | 622,966 | works, partly | 3 tools, tool-call hooks, input hooks, 2 skills
ignored: event "turn_end"; event "model_select"; event "agent_end"; event "session_before_switch"; event "session_before_fork"; event "session_compact"; event "session_tree"; event "agent_start"; event "message_start"; event "agent_settled"; event "session_before_compact"; command /subagents-watchdog; comman |
| 5 | [@langfuse/pi-observability-plugin](https://www.npmjs.com/package/@langfuse/pi-observability-plugin) 0.1.2 | 322,140 | nothing to use | loads but registers only session_start as installed (it may need configuration first) |
-| 6 | [@juicesharp/rpiv-ask-user-question](https://www.npmjs.com/package/@juicesharp/rpiv-ask-user-question) 2.12.0 | 306,198 | works | 1 tool |
-| 7 | [pi-mcp-extension](https://www.npmjs.com/package/pi-mcp-extension) 1.5.1 | 270,009 | nothing to use | loads but registers nothing as installed (it may need configuration first) |
-| 8 | [@juicesharp/rpiv-todo](https://www.npmjs.com/package/@juicesharp/rpiv-todo) 2.12.0 | 203,830 | works, partly | 1 tool
ignored: event "session_compact"; event "session_tree"; event "tool_execution_end"; event "agent_start"; command /todos; shortcut ctrl+shift+t |
-| 9 | [openwiki](https://www.npmjs.com/package/openwiki) 0.7.2 | 190,350 | works | 6 tools, 1 skill |
+| 6 | [@juicesharp/rpiv-ask-user-question](https://www.npmjs.com/package/@juicesharp/rpiv-ask-user-question) 2.13.5 | 301,013 | works | 1 tool |
+| 7 | [pi-mcp-extension](https://www.npmjs.com/package/pi-mcp-extension) 1.5.1 | 285,855 | nothing to use | loads but registers nothing as installed (it may need configuration first) |
+| 8 | [@juicesharp/rpiv-todo](https://www.npmjs.com/package/@juicesharp/rpiv-todo) 2.13.5 | 196,941 | works, partly | 1 tool
ignored: event "session_compact"; event "session_tree"; event "tool_execution_end"; event "agent_start"; command /todos; shortcut ctrl+shift+t |
+| 9 | [openwiki](https://www.npmjs.com/package/openwiki) 0.7.2 | 193,787 | works | 6 tools, 1 skill |
| 10 | [pi-goal-x](https://www.npmjs.com/package/pi-goal-x) 0.32.3 | 141,230 | refused | pi extensions handle events yoagent never fires, which would decide or rewrite what the agent does: goal.ts: event "before_provider_request" (list an event in allowUnmapped to accept that it goes unenforced) |
-| 11 | [@plannotator/pi-extension](https://www.npmjs.com/package/@plannotator/pi-extension) 0.28.12 | 132,034 | works, partly | tool-call hooks
ignored: event "turn_start"; event "turn_end"; event "message_start"; event "message_update"; event "tool_execution_start"; event "agent_end"; event "agent_settled"; event "resources_discover"; event "session_compact"; event "session_tree"; command /plannotator-plan-mode; command /plannotator-review; command |
+| 11 | [@plannotator/pi-extension](https://www.npmjs.com/package/@plannotator/pi-extension) 0.28.17 | 132,677 | works, partly | tool-call hooks
ignored: event "turn_start"; event "turn_end"; event "message_start"; event "message_update"; event "tool_execution_start"; event "agent_end"; event "agent_settled"; event "resources_discover"; event "session_compact"; event "session_tree"; command /plannotator-plan-mode; command /plannotator-review; command |
| 12 | [bigpowers](https://www.npmjs.com/package/bigpowers) 2.88.9 | 130,483 | works | 1 tool, tool-call hooks, 81 skills |
-| 13 | [@companion-ai/feynman](https://www.npmjs.com/package/@companion-ai/feynman) 0.5.34 | 120,059 | refused | pi extensions handle events yoagent never fires, which would decide or rewrite what the agent does: research-tools.ts: event "before_provider_request" (list an event in allowUnmapped to accept that it goes unenforced) Its 16 skills still load with yoagent's skills loader. |
+| 13 | [@companion-ai/feynman](https://www.npmjs.com/package/@companion-ai/feynman) 0.5.38 | 114,542 | refused | pi extensions handle events yoagent never fires, which would decide or rewrite what the agent does: research-tools.ts: event "before_provider_request" (list an event in allowUnmapped to accept that it goes unenforced) Its 16 skills still load with yoagent's skills loader. |
| 14 | [pi-background-tasks](https://www.npmjs.com/package/pi-background-tasks) 2.6.9 | 108,986 | refused | its session_start failed, so the adapter did not load it: anthropic-attribution.js: Cannot read properties of undefined (reading 'getProvider') |
-| 15 | [pi-lens](https://www.npmjs.com/package/pi-lens) 4.4.3 | 108,180 | works, partly | 8 tools, tool-call hooks, 4 skills, message_end and context checked each run (a rewrite would stop it)
ignored: event "resources_discover"; event "session_tree"; event "tool_execution_end"; event "turn_start"; event "agent_end"; event "turn_end"; event "agent_settled"; command /lens-toggle; command /lens-context-toggle; command /lens-widget-toggle; command /lens-tdi; command /lens-map; command /lens-health; c |
-| 16 | [pi-powerline-footer](https://www.npmjs.com/package/pi-powerline-footer) 0.20.0 | 106,500 | works, partly | tool-call hooks, input hooks, message_end checked each run (a rewrite would stop it)
ignored: event "user_bash"; event "model_select"; event "thinking_level_select"; event "session_tree"; event "session_info_changed"; event "agent_start"; event "message_update"; event "message_start"; event "turn_end"; event "session_before_compact"; event "session_compact"; event "session_compact_failed"; e |
-| 17 | [context-mode](https://www.npmjs.com/package/context-mode) 1.0.169 | 103,613 | works, partly | tool-call hooks, 8 skills, context checked each run (a rewrite would stop it)
ignored: event "before_provider_response"; event "turn_end"; event "session_before_compact"; event "session_compact"; command /ctx-stats; command /ctx-doctor |
-| 18 | [@dietrichgebert/ponytail](https://www.npmjs.com/package/@dietrichgebert/ponytail) 5.1.0 | 97,104 | works, partly | input hooks, prompt additions, 6 skills
ignored: event "session_tree"; event "agent_start"; event "agent_end"; command /ponytail; command /ponytail-review; command /ponytail-audit; command /ponytail-gain; command /ponytail-debt; command /ponytail-help |
+| 15 | [pi-powerline-footer](https://www.npmjs.com/package/pi-powerline-footer) 0.20.0 | 106,751 | works, partly | tool-call hooks, input hooks, message_end checked each run (a rewrite would stop it)
ignored: event "user_bash"; event "model_select"; event "thinking_level_select"; event "session_tree"; event "session_info_changed"; event "agent_start"; event "message_update"; event "message_start"; event "turn_end"; event "session_before_compact"; event "session_compact"; event "session_compact_failed"; e |
+| 16 | [context-mode](https://www.npmjs.com/package/context-mode) 1.0.169 | 104,211 | works, partly | tool-call hooks, 8 skills, context checked each run (a rewrite would stop it)
ignored: event "before_provider_response"; event "turn_end"; event "session_before_compact"; event "session_compact"; command /ctx-stats; command /ctx-doctor |
+| 17 | [pi-lens](https://www.npmjs.com/package/pi-lens) 4.4.3 | 102,007 | works, partly | 8 tools, tool-call hooks, 4 skills, message_end and context checked each run (a rewrite would stop it)
ignored: event "resources_discover"; event "session_tree"; event "tool_execution_end"; event "turn_start"; event "agent_end"; event "turn_end"; event "agent_settled"; command /lens-toggle; command /lens-context-toggle; command /lens-widget-toggle; command /lens-tdi; command /lens-map; command /lens-health; c |
+| 18 | [@dietrichgebert/ponytail](https://www.npmjs.com/package/@dietrichgebert/ponytail) 5.1.0 | 97,477 | works, partly | input hooks, prompt additions, 6 skills
ignored: event "session_tree"; event "agent_start"; event "agent_end"; command /ponytail; command /ponytail-review; command /ponytail-audit; command /ponytail-gain; command /ponytail-debt; command /ponytail-help |
| 19 | [@langchain/langsmith-pi-extension](https://www.npmjs.com/package/@langchain/langsmith-pi-extension) 0.2.1 | 91,431 | nothing to use | loads; everything it registers is ignored here
ignored: command /langsmith-tracing |
-| 20 | [@narumitw/pi-usage](https://www.npmjs.com/package/@narumitw/pi-usage) 0.65.0 | 84,271 | refused | pi extensions handle events yoagent never fires, which would decide or rewrite what the agent does: index.ts: event "before_provider_request" (list an event in allowUnmapped to accept that it goes unenforced) |
+| 20 | [@narumitw/pi-usage](https://www.npmjs.com/package/@narumitw/pi-usage) 0.65.0 | 84,983 | refused | pi extensions handle events yoagent never fires, which would decide or rewrite what the agent does: index.ts: event "before_provider_request" (list an event in allowUnmapped to accept that it goes unenforced) |
## DSH plugins
-The 20 most-downloaded packages (by monthly downloads, among the first 1000 results of npm's search) with the `dsh-plugin` keyword, over DSH's base packages and the tools adapter (DSH 0.2.0-rc.2), on 2026-10-10. 3 not applicable · 13 needs a DSH host · 2 works, partly · 1 failed · 1 works.
+The 20 most-downloaded packages (by monthly downloads, among the first 1000 results of npm's search) with the `dsh-plugin` keyword, over DSH's base packages and the tools adapter (DSH 0.2.0-rc.2), on 2026-10-12. 3 not applicable · 12 needs a DSH host · 3 works, partly · 1 failed · 1 works.
| # | Package | Downloads / month | Result | What yoagent gets |
|---|---|---:|---|---|
-| 1 | [dshmarket](https://www.npmjs.com/package/dshmarket) 1.66.15 | 561,135 | not applicable | starts, but adds no tools or guidance (UI, settings or server features). Its web UI needs DSH's web client. |
-| 2 | [@michengai/dsh-skills-manager](https://www.npmjs.com/package/@michengai/dsh-skills-manager) 1.1.13 | 201,182 | needs a DSH host | waits for services yoagent's DSH runtime does not run: webServer, webRuntime, skills, sessions. Its web UI needs DSH's web client. |
-| 3 | [@michengai/dsh-archive-manager](https://www.npmjs.com/package/@michengai/dsh-archive-manager) 1.0.16 | 180,612 | needs a DSH host | loads DSH packages an agent library does not ship: @deepseek-ai/dsh-workspace. Its web UI needs DSH's web client. (installed without its DSH peers (@deepseek-ai/dsh-workspace@0.2.0-rc.2, @deepseek-ai/dsh-spill-local@0.2.0-rc.2, @deepseek-ai/dsh-client-store@0.2.0-rc.2, @deepseek-ai/dsh-client-locale@0.2.0-rc.2, @deepseek-ai/dsh-client-runtime@0.2.0-rc.2, @deepseek-ai/dsh-host-webserver@0.2.0-rc.2, @deepseek-ai/dsh-storage-domain@0.2.0-rc.2, @deepseek-ai/dsh-typert-registry@0.2.0-rc.2, @deepseek-ai/dsh-client-connection@0.2.0-rc.2, @deepseek-ai/dsh-client-ui-sidebar@0.2.0-rc.2, @deepseek-ai/dsh-client-ui-workspace@0.2.0-rc.2, @deepseek-ai/dsh-client-ui-primitives@0.2.0-rc.2, @deepseek-ai/dsh-client-ui-conversation@0.2.0-rc.2, @deepseek-ai/dsh-session-format-catalog@0.2.0-rc.2, @deepseek-ai/dsh-session-projection-cache@0.2.0-rc.2)) |
-| 4 | [dsh-whale-widget](https://www.npmjs.com/package/dsh-whale-widget) 0.3.18 | 146,796 | not applicable | starts, but adds no tools or guidance (UI, settings or server features). |
+| 1 | [dshmarket](https://www.npmjs.com/package/dshmarket) 1.66.17 | 570,846 | not applicable | starts, but adds no tools or guidance (UI, settings or server features). Its web UI needs DSH's web client. |
+| 2 | [@michengai/dsh-skills-manager](https://www.npmjs.com/package/@michengai/dsh-skills-manager) 1.1.17 | 202,149 | needs a DSH host | waits for services yoagent's DSH runtime does not run: webServer, sessions. Its web UI needs DSH's web client. (installed without npm resolving its peers) |
+| 3 | [@michengai/dsh-archive-manager](https://www.npmjs.com/package/@michengai/dsh-archive-manager) 1.0.17 | 182,870 | needs a DSH host | loads DSH packages an agent library does not ship: @deepseek-ai/dsh-workspace. Its web UI needs DSH's web client. (installed without its DSH peers (@deepseek-ai/dsh-workspace@0.2.0-rc.2, @deepseek-ai/dsh-spill-local@0.2.0-rc.2, @deepseek-ai/dsh-client-store@0.2.0-rc.2, @deepseek-ai/dsh-client-locale@0.2.0-rc.2, @deepseek-ai/dsh-client-runtime@0.2.0-rc.2, @deepseek-ai/dsh-host-webserver@0.2.0-rc.2, @deepseek-ai/dsh-storage-domain@0.2.0-rc.2, @deepseek-ai/dsh-typert-registry@0.2.0-rc.2, @deepseek-ai/dsh-client-connection@0.2.0-rc.2, @deepseek-ai/dsh-client-ui-sidebar@0.2.0-rc.2, @deepseek-ai/dsh-client-ui-workspace@0.2.0-rc.2, @deepseek-ai/dsh-client-ui-primitives@0.2.0-rc.2, @deepseek-ai/dsh-client-ui-conversation@0.2.0-rc.2, @deepseek-ai/dsh-session-format-catalog@0.2.0-rc.2, @deepseek-ai/dsh-session-projection-cache@0.2.0-rc.2)) |
+| 4 | [dsh-whale-widget](https://www.npmjs.com/package/dsh-whale-widget) 0.4.2 | 154,055 | not applicable | starts, but adds no tools or guidance (UI, settings or server features). |
| 5 | [dsh-plugin-model-proxy](https://www.npmjs.com/package/dsh-plugin-model-proxy) 0.1.6 | 131,719 | needs a DSH host | waits for services yoagent's DSH runtime does not run: settings, llm. Its web UI needs DSH's web client. |
-| 6 | [dsh-cost-meter](https://www.npmjs.com/package/dsh-cost-meter) 1.8.20 | 108,950 | not applicable | starts, but adds no tools or guidance (UI, settings or server features). Its web UI needs DSH's web client. |
-| 7 | [@xmanrui/dsh-im](https://www.npmjs.com/package/@xmanrui/dsh-im) 4.38.0 | 62,925 | needs a DSH host | waits for services yoagent's DSH runtime does not run: connection, credentials, typertGateway. Its web UI needs DSH's web client. |
-| 8 | [@nanmicoder/dsh-agent-teams](https://www.npmjs.com/package/@nanmicoder/dsh-agent-teams) 0.1.22 | 55,140 | needs a DSH host | waits for services yoagent's DSH runtime does not run: llm, subagents, agents. Its web UI needs DSH's web client. |
-| 9 | [@dfy-plugins/dsh-image-generation](https://www.npmjs.com/package/@dfy-plugins/dsh-image-generation) 0.1.4 | 52,343 | needs a DSH host | waits for services yoagent's DSH runtime does not run: attachments, credentials, fs, skills, sessionPersistence, settings. Its web UI needs DSH's web client. (installed without npm resolving its peers) |
-| 10 | [dsh-univer-office](https://www.npmjs.com/package/dsh-univer-office) 0.3.7 | 49,557 | works, partly | 13 tools
ignored: its web UI (DSH's web client) |
-| 11 | [dsh-mnemon](https://www.npmjs.com/package/dsh-mnemon) 0.5.27 | 44,342 | needs a DSH host | waits for services yoagent's DSH runtime does not run: loader. Its web UI needs DSH's web client. |
-| 12 | [@liustack/modsearch](https://www.npmjs.com/package/@liustack/modsearch) 5.10.6 | 43,116 | failed | modsearch: failed plugin failed: TypeError: Cannot read properties of null (reading 'searchProvider') |
-| 13 | [dsh-pet](https://www.npmjs.com/package/dsh-pet) 0.3.6 | 41,822 | needs a DSH host | waits for services yoagent's DSH runtime does not run: webServer, agentDefaultModel, credentials, llm, commands. Its web UI needs DSH's web client. |
-| 14 | [@dfy-plugins/dsh-bundle](https://www.npmjs.com/package/@dfy-plugins/dsh-bundle) 0.1.2 | 41,676 | needs a DSH host | waits for services yoagent's DSH runtime does not run: webServer, settings, workspaceRegistry, llm, attachments, agents, credentials, fs, skills, sessionPersistence, agentPresets. |
-| 15 | [dsh-plugin-wallpaper-engine](https://www.npmjs.com/package/dsh-plugin-wallpaper-engine) 1.3.1 | 41,148 | needs a DSH host | waits for services yoagent's DSH runtime does not run: webServer. Its web UI needs DSH's web client. (installed without its DSH peers (@deepseek-ai/dsh-client-runtime@0.2.0-rc.2, @deepseek-ai/dsh-host-webserver@0.2.0-rc.2, @deepseek-ai/dsh-client-ui-slots@0.2.0-rc.2)) |
-| 16 | [dsh-free-search](https://www.npmjs.com/package/dsh-free-search) 0.8.5 | 40,197 | works, partly | 9 tools, prompt guidance
ignored: its web UI (DSH's web client) |
-| 17 | [@roarpeng/graphflow](https://www.npmjs.com/package/@roarpeng/graphflow) 2.2.0 | 34,657 | needs a DSH host | loads DSH packages an agent library does not ship: @deepseek-ai/dsh-mcp-client. Its web UI needs DSH's web client. |
-| 18 | [dsh-dream-skin](https://www.npmjs.com/package/dsh-dream-skin) 10.10.0 | 33,804 | needs a DSH host | waits for services yoagent's DSH runtime does not run: webServer, webRuntime. Its web UI needs DSH's web client. (installed without its DSH peers (@deepseek-ai/dsh-client-store@0.2.0-rc.2, @deepseek-ai/dsh-client-locale@0.2.0-rc.2, @deepseek-ai/dsh-client-runtime@0.2.0-rc.2, @deepseek-ai/dsh-client-ui-theme@0.2.0-rc.2, @deepseek-ai/dsh-client-ui-settings@0.2.0-rc.2, @deepseek-ai/dsh-client-ui-settings-general@0.2.0-rc.2)) |
-| 19 | [@dfy-plugins/dsh-visualize](https://www.npmjs.com/package/@dfy-plugins/dsh-visualize) 0.1.5 | 30,262 | needs a DSH host | waits for services yoagent's DSH runtime does not run: fs, skills, sessionPersistence. Its web UI needs DSH's web client. (installed without npm resolving its peers) |
+| 6 | [dsh-cost-meter](https://www.npmjs.com/package/dsh-cost-meter) 1.8.22 | 108,645 | not applicable | starts, but adds no tools or guidance (UI, settings or server features). Its web UI needs DSH's web client. |
+| 7 | [@xmanrui/dsh-im](https://www.npmjs.com/package/@xmanrui/dsh-im) 4.38.1 | 62,286 | needs a DSH host | waits for services yoagent's DSH runtime does not run: connection, typertGateway. Its web UI needs DSH's web client. |
+| 8 | [@nanmicoder/dsh-agent-teams](https://www.npmjs.com/package/@nanmicoder/dsh-agent-teams) 0.1.23 | 55,140 | needs a DSH host | waits for services yoagent's DSH runtime does not run: llm, subagents, agents. Its web UI needs DSH's web client. |
+| 9 | [@dfy-plugins/dsh-image-generation](https://www.npmjs.com/package/@dfy-plugins/dsh-image-generation) 0.1.4 | 52,343 | needs a DSH host | waits for services yoagent's DSH runtime does not run: settings. Its web UI needs DSH's web client. (installed without npm resolving its peers) |
+| 10 | [dsh-univer-office](https://www.npmjs.com/package/dsh-univer-office) 0.3.7 | 50,677 | works, partly | 14 tools
ignored: its web UI (DSH's web client) |
+| 11 | [dsh-mnemon](https://www.npmjs.com/package/dsh-mnemon) 0.5.28 | 45,540 | needs a DSH host | waits for services yoagent's DSH runtime does not run: loader. Its web UI needs DSH's web client. |
+| 12 | [dsh-plugin-wallpaper-engine](https://www.npmjs.com/package/dsh-plugin-wallpaper-engine) 1.3.2 | 43,299 | needs a DSH host | waits for services yoagent's DSH runtime does not run: webServer. Its web UI needs DSH's web client. (installed without its DSH peers (@deepseek-ai/dsh-client-runtime@0.2.0-rc.2, @deepseek-ai/dsh-host-webserver@0.2.0-rc.2, @deepseek-ai/dsh-client-ui-slots@0.2.0-rc.2)) |
+| 13 | [dsh-free-search](https://www.npmjs.com/package/dsh-free-search) 0.8.9 | 42,419 | works, partly | 9 tools, prompt guidance
ignored: its web UI (DSH's web client) |
+| 14 | [@liustack/modsearch](https://www.npmjs.com/package/@liustack/modsearch) 5.10.6 | 42,230 | failed | modsearch: failed plugin failed: TypeError: Cannot read properties of null (reading 'searchProvider') |
+| 15 | [dsh-pet](https://www.npmjs.com/package/dsh-pet) 0.3.6 | 41,822 | needs a DSH host | waits for services yoagent's DSH runtime does not run: webServer, agentDefaultModel, llm, commands. Its web UI needs DSH's web client. |
+| 16 | [@dfy-plugins/dsh-bundle](https://www.npmjs.com/package/@dfy-plugins/dsh-bundle) 0.1.2 | 41,676 | needs a DSH host | waits for services yoagent's DSH runtime does not run: webServer, settings, workspaceRegistry, llm, agents, agentPresets. |
+| 17 | [@roarpeng/graphflow](https://www.npmjs.com/package/@roarpeng/graphflow) 2.3.0 | 36,397 | needs a DSH host | loads DSH packages an agent library does not ship: @deepseek-ai/dsh-mcp-client. Its web UI needs DSH's web client. |
+| 18 | [dsh-dream-skin](https://www.npmjs.com/package/dsh-dream-skin) 10.12.1 | 35,393 | needs a DSH host | waits for services yoagent's DSH runtime does not run: webServer, webRuntime. Its web UI needs DSH's web client. (installed without its DSH peers (@deepseek-ai/dsh-client-store@0.2.0-rc.2, @deepseek-ai/dsh-client-locale@0.2.0-rc.2, @deepseek-ai/dsh-client-runtime@0.2.0-rc.2, @deepseek-ai/dsh-client-ui-theme@0.2.0-rc.2, @deepseek-ai/dsh-client-ui-settings@0.2.0-rc.2, @deepseek-ai/dsh-client-ui-settings-general@0.2.0-rc.2)) |
+| 19 | [@dfy-plugins/dsh-visualize](https://www.npmjs.com/package/@dfy-plugins/dsh-visualize) 0.1.5 | 30,262 | works, partly | 1 tool (installed without npm resolving its peers)
ignored: its web UI (DSH's web client) |
| 20 | [dsh-find-plugin](https://www.npmjs.com/package/dsh-find-plugin) 0.4.0 | 29,744 | works | 1 tool |
diff --git a/integrations/yoagent-frontend/CLAUDE.md b/integrations/yoagent-frontend/CLAUDE.md
index a77638f..1973e75 100644
--- a/integrations/yoagent-frontend/CLAUDE.md
+++ b/integrations/yoagent-frontend/CLAUDE.md
@@ -6,7 +6,7 @@ Guidance for Claude Code when working in `integrations/yoagent-frontend/`. The r
## Frontend layer (`integrations/yoagent-frontend/`, EXPERIMENTAL, separate crate)
-`publish = false`, no API promise; neither yoagent's core nor yoagent-rutis's API depends on it (its one touch outside: the pi adapter's optional dialogs, below). `Session::new(accept_quit) -> (Session, Driver)`: `Driver::run(agent) -> Agent` owns the agent; the `Driver` holds an `Ending` guard, so however it goes (returns, its task panics or is aborted, or it is dropped unrun) an open run gets `RunEnd{outcome: Error}`, the session is marked closed and every frontend gets `Closed`. `Session` (clone; only handles hold the command sender, so dropping them all ends the driver): `connect()` → `Connection { id, messages }` (own unbounded channel per frontend, `Hello` first, then the replay of `Inner.history` (the last `HISTORY` = 5000 `runStart`/`event`/`runEnd`/`notice` broadcasts, recorded in `Inner::broadcast` under `clients` then `history`, so a late frontend gets each message once; kept across a reset; questions not included — Hello carries the open ones) — then `Closed` at once if the session ended — built under the clients lock, nothing dropped; **lock order is `clients` → `ui`**: never take `clients` (`frontends()`, `broadcast`) while holding `ui`), `send(ClientMessage) -> bool` (false + `warn!` once closed; a `UiResponse` resolves its question only if `UiRequest::accepts` the value — confirm: bool, select: an option or null, input: string or null — else it stays open), `is_closed`, `notice(level, msg)`, crate-private `send_to(id, msg)`, `ask(UiRequest, timeout)` / `ask_keyed(.., key)` (no frontend → `default_answer` at once, logged; else broadcast `UiRequest`, first fitting answer wins; a `Close` guard removes the entry however `ask` ends and broadcasts `UiResolved{id, reason: Answered|TimedOut|Withdrawn}`; a key already in use is not taken over (warned) and the guard removes a key only if it maps to its own id), `ask_later(request)` (= `ask_inner(.., timeout None, hold true)`: kept open with no frontend attached (later ones get it in `Hello`), no timeout; the `Ending` guard clears `pending` under `clients` → `ui`, and `ask_inner` returns the default when `is_closed()` under the `ui` lock, so a held question never outlives the session), `withdraw(key)` (unknown key → remembered 60 s, so a withdrawal that overtakes its question returns the default without showing it), `add_ui_plugin(UiPlugin, module) -> Option` (the version; empty name → `None`), `remove_ui_plugin(name, Option)`, `ui_plugin_module`. Protocol (`protocol.rs`, tag `type`, camelCase, enums `#[non_exhaustive]`): in `prompt`/`steer`/`followUp`/`abort`/`reset`/`uiResponse`/`quit`; out `hello{running,uiPlugins,uiRequests}`, `runStart{run,prompt}`, `event{run,event}` (text/thinking deltas merged by `Coalesced`, held ≤30 ms), `runEnd{run,outcome: RunOutcome(completed|aborted|rejected|error),error,stats,totalCostUsd}` (always once per run; no `AgentEnd` → `error` + an error `Notice`; `InputRejected` → `rejected`; Abort/Reset/Quit → `aborted`; else the last assistant message), `uiRequest`/`uiResolved{id,reason}`, `notice{level,message}`, `uiPlugins`, `closed`. `UiPlugin.version` is `skip_deserializing` (set by the session). Prompt mid-run → queued; steer/followUp idle → a prompt; steering/follow-ups the loop never read (they arrived after its last look, e.g. while extensions `finish`) become the next run's prompt unless the run was aborted (a reset clears them); `Reset` mid-run aborts, drops the queue and clears history after `finish`. `services::provide(root, &session)`: host services `frontend` (`connect(client)` sync → `client.receive(msg)` per message in order, raced against the disposer / the caller's `Connection::closed`, a failed `receive` disconnects it; `send` async, `Err` once closed; `addUiPlugin(info, module)` sync → disposer removing that version only, `Err` on an empty name) and `ui` (`frontends()` sync → the attached count; `request(request, timeoutMs?)` → `Value::future`; `key` must be a string, `timeoutMs` null or a finite non-negative number (fractions ok); `withdraw(key)` string only); unit tests drive `invoke` directly. `web::serve(session, addr) -> Served` (private fields; `url()`, `addr()`, `token()`, `stop()`; dropping it stops serving) (axum 0.8, `ws`): `/`, `/app.js`, `/lib.js` (embedded `web/`), `/favicon.ico` 204, `/ui-plugins/{name}` (`.js`), `/ws` **requires `?t=`** (uuid v4; 403 otherwise — WebSockets skip CORS, so without it any page could drive the agent); a frame that is not the protocol → `warn!` + a `Notice` to that frontend; UI plugin modules are trusted code. Page: `web/lib.js` (no DOM; `web/package.json` marks `web/` as ESM — the terminal UI imports it, and rutis's loader would read it as CommonJS: `toolView(details)` (only the six card kinds), `viewTitle`, `diffRows` (LCS; unaligned when old × new line counts exceed 400²), `parseAnswer(request, text)` (the terminal UI's typed answers: `{value}` or `{error}` → asked again, never guessed), `safeUrl` (http(s)), `markdownParts` (https links only), `Questions` FIFO, `runEndLine`), tested by `node --test web/lib.test.js`; questions are a docked, non-modal `