Adopts @cyanheads/mcp-ts-core 0.8.17 (10 versions from 0.7.0). The
headline framework feature is the typed error contract:
tool({ errors: [...] }) declares a domain failure mode with a code,
trigger, and recovery string; ctx.fail(reason, …) throws it; and
the framework mirrors data.recovery.hint into rendered content[]
so format()-only clients see the same guidance.
Server changes adopting the contract:
- hn_get_thread declares item_not_found (NotFound).
- hn_get_user declares user_not_found (NotFound).
- HnService rate-limit-as-HTML throw carries
data: { upstream, reason: 'upstream_html', recovery: { hint } } so
the service-layer failure exposes the same shape.
- hn_search_content empty results now name the filters that were
applied (tags, author, minPoints, dateRange) and tell the agent
what to relax. Rendered as a recovery sentence on no-hit responses
and a > blockquote footer on non-empty pages.
Tooling:
- New Framework Antipatterns devcheck step
(scripts/check-framework-antipatterns.ts) flags SDK-coupling
shortcuts.
- New scripts/split-changelog.ts helper.
- Two new project skills synced from upstream: api-canvas (DataCanvas
+ spillover) and tool-defs-analysis (read-only audit of MCP
definition language). 15 existing skills refreshed and propagated
to .claude/skills/.
Other:
- Tool descriptions and field describes tightened across all four
tools — sharper guidance on count, offset, depth, maxComments,
and the thread item type field now lists the actual HN item types.
- @biomejs/biome 2.4.13 → 2.4.14, tsc-alias 1.8.16 → 1.8.17.
- Drop dev:stdio and dev:http package scripts in favor of invoking
bun --watch directly.
Tests: 110 passing.