declick 0.3.1
Pre-launch QA of the published 0.3.0 on Windows and Linux, against Stripe, GitHub, Slack, Twilio, Openverse, api.weather.gov, apis.guru, two GraphQL endpoints, two reference MCP servers and a SQLite file. Every fix below came out of that pass and carries a regression test; 464 tests pass.
- License: 0.3.1 is the first release under the Elastic License 2.0 (SPDX
Elastic-2.0), reproduced in full inLICENSE. The source stays public and readable: use it, change it, redistribute it, ship it inside your own product. You may not offer it to others as a managed service. Release 0.3.0 as published on npm was released under the MIT license and stays under it. Commercial licenses for teams and production support: https://declick.dev. - Governance: a mutating verb with no
DASHCLAW_API_KEYset no longer writes a warning line to stderr. It runs, and the envelope recordsgovernance: {enabled: false, decision: "skipped", reason: "no guard configured"}. Piping a mutating call now produces the envelope and nothing else. - Skills:
addwritesSKILL.mdinto every agent skills directory that exists on the machine, not only~/.claude/skills:~/.codex/skills,~/.hermes/skills,~/.openclaw/skillsand~/.agents/skillswhen the directory is already there, and none are created for an agent that is not installed.DECLICK_SKILLSis a comma-separated override that replaces the list.declick skill <name> --printwrites one adapter's SKILL.md text to stdout instead of disk, for an AGENTS.md or a system prompt.skillTextis exported for callers that want to render it themselves. describepages itself instead of failing lint on a large surface: the page stays under the 2000 char ceiling and ends with a footer naming how many verbs are left, the total, and the flags that reach them (--grep,--offset,--limit,--verb).declick lintmeasures the paged page, so a 60 verb spec compiles.- YAML: zero-indent block sequences, plain-scalar folding, anchors before a sequence, sequence-item indent and multi-line quoted scalars all parse. Stripe's
spec3.yamlparses to 419 paths, Openverse's to 17. - Engine detection: a spec URL whose head does not show the openapi key no longer routes to the web engine, and a spec URL that answers 404 fails naming the status (
GET <url> -> 404) instead of reporting no recipes. run: a verb's compiledreturns.rowsPathis auto-unwrapped only when--fieldsor--limitis passed, so an unfiltered call returns the resource as the API sent it;rowsPathis compiled only for a list-shaped property.importreadsexport's envelope as it comes, sodeclick export <name> | declick import -round-trips without hand-editing the bundle.doctor:healthyfollowsblockingonly, so a fresh home whosebindirectory is not yet on PATH reports healthy with one warning rather than unhealthy.- A failed
addprints the first eight lint errors followed by a count of the rest, instead of one unreadable line. - Node below 24 prints one line naming the version it found and exits 1, from both
bin/declick.mjsandbin/run.mjs. The engine index pulls innode:sqliteat import time, so the check now runs before the engines load on either entry point. declick engineslists sqlite once, and reports desktop as not ready with "Windows only (deskclaw UI Automation)" on any platform that is not Windows.- Launcher: a launcher declick itself wrote is no longer read as a name collision, so
addandbuildwork afterdeclick path --installputs~/.declick/binon PATH. The.cmdtwin is written on Windows only. saveManifestnormalizes a description on the way to disk: collapsed to one line, then its first sentence, and a first sentence still over the bound cut back to the last word boundary (80 chars for a verb, 200 for args and flags).addandbuildnormalize before lint, so a spec with long, multi-line or backticked descriptions compiles: Stripe (594 verbs), GitHub (1224), Openverse and api.weather.gov all add from their public URLs.importstill lints the bundle as given, since a bundle is untrusted input.- The secret scanner skips
exampleanddefaultvalues, which are spec-provided text (GitHub's example SHAs are not credentials). - YAML: a mapping key that contains a colon (
read:pets:,x:y:) is a key, in block and flow context, so OAuth scope maps and a siblingapi_keyscheme survive; the YAML twin of the petstore spec now compiles the same auth keys as the JSON one. - OpenAPI: a spec that declares no
serversgets its origin as the base URL, not the spec's directory. A required header parameter that is not a security scheme (User-Agent,Accept) is an ordinary flag with a default, never an auth key.rowsPathis compiled only for a list-shaped property (data,items,results, ... or a small object whose other keys are pagination), in the openapi, mcp and postman engines alike;--fieldsnaming keys of the object itself projects the object instead of unwrapping. - A bad
--limit(0,abc) returns the failure envelope on stdout from both entry points instead of a bare stderr line. - Did-you-mean prefers a prefix match (
get-petsuggestsget-pet-by-id,descrsuggestsdescribe) before edit distance, in the runtime and the management CLI. addon a plain web page URL without theweb:prefix says it is not an API spec and shows both theweb:form and the spec alternative;engines --sourceon the same URL suggests theweb:form. A failedaddcapsdata.errorsat 50 and reportsdata.errorCount.path --installwrites the file the login shell reads:~/.zprofilefor zsh (the macOS default),~/.bash_profilewhen it exists for bash on macOS,fish_add_pathinconfig.fishfor fish,~/.profileotherwise. The stderr hint afteraddnames the same file.- The mcp and cli engines spawn
cmd.exeexplicitly instead of passingshell: true, so Node 24 no longer emits a DEP0190 warning into the output. creds: the "or run: creds mint " hint on an exit 4 appears only when that tool is on PATH.sqlite: aqueryverb called without--sqlsays so.add app:<w> --recipesruns the launcher and skill preflight before importing recipes, and a fresh adapter directory is rolled back when compile or lint refuses, so a refused add no longer leaves~/.declick/<name>/recipes/with no manifest.- README, docs, site and package description updated for agent-neutral skill discovery and the optional guard; DashClaw is explained and linked. The reference material (desktop recipe steps, the manifest, environment variables) moved to
docs/REFERENCE.md.
Install: npm i -g declick@0.3.1 · npm · declick.dev