Skip to content

Drop the empty input hint that stopped the whole plugin loading - #52

Merged
forrestlinfeng merged 1 commit into
mainfrom
fix/status-command-empty-hint
Oct 23, 2026
Merged

forrestlinfeng merged 1 commit into
mainfrom
fix/status-command-empty-hint

Conversation

@forrestlinfeng

Copy link
Copy Markdown
Contributor

What broke

@evomap/dsh-evolver@0.3.0 does not load at all on any host with a commands service. evolver-status declared input: { hint: '' }, and dsh-commands rejects a present input whose hint is blank:

[E] [evolver] TypeError: command "evolver-status" input hint must not be empty
    at normalizeDefinition (.../@deepseek-ai/dsh-commands/lib/index.js:158:48)
    at Object.callback (.../@evomap/dsh-evolver/src/index.js:335:53)
    at new apply (.../@evomap/dsh-evolver/src/index.js:323:7)

That register runs inside the ctx.inject(['commands']) callback in apply, so the TypeError escapes apply and the whole plugin fiber fails: no recall priming, no turn reports, no skill provider, no commands. Nothing of Evolver reaches a session.

Only 0.3.0 is affected — 0.2.x built the hint from argument-hint and had no empty-string path.

The fix

A command that takes no argument omits input entirely.

The fake host in test/support/host.js accepted what the real one rejects, which is how this shipped green. It now mirrors normalizeDefinition's rules, so all eight definitions are validated at registration the way the host validates them.

Verification

  • npm test — 182 pass.
  • Putting input: { hint: '' } back fails 11 tests in apply.test.js with the production error, so the regression is covered.
  • Every definition run through the real CommandRuntime.prototype.register from the installed DSH Desktop: all eight get past validation, and the same definition with the old input is still rejected with command "evolver-status" input hint must not be empty.

Needs a 0.3.1 tag to reach users.

🤖 Generated with Claude Code

dsh-commands rejects a command whose `input` is present with a blank hint,
and `evolver-status` declared `input: { hint: '' }`. The TypeError escaped
the `ctx.inject(['commands'])` callback inside `apply`, so every host with a
commands service failed to load Evolver at all: no recall, no reports, no
skill, no commands. A command that takes no argument omits `input`.

The fake host in the tests accepted what the real one rejects, which is how
this shipped; it now mirrors dsh-commands' own validation, so the eight
definitions are checked at registration the way the host checks them.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@evomap-aiqa-bot

evomap-aiqa-bot Bot commented Oct 23, 2026 •

Copy link
Copy Markdown

Sentinel 已审核此变更,未发现需要报告的问题。

开发 agent 查询详情: 调用 MCP 工具 sentinel_pr_review_context,传入 owner_repo="evomap/evolver-dsh-plugin"、pr_number=52、head_sha="92b742ce70ae4bdbda0f47dc6c3ed804e4f60544",并按条目追加 finding_id 或 finding_key。

由 Sentinel 审核 · 目标提交 92b742ce70ae

@forrestlinfeng
forrestlinfeng merged commit b6799a0 into main Oct 23, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant