Skip to content

v0.9.0

Latest

Choose a tag to compare

@kiki830621 kiki830621 released this 04 Jul 01:54
  • Explicit ecosystem hint syntax for look-up — a <ecosystem>:<name> prefix (npm:go, cran:dplyr, crates:serde@1.0.100) forces a specific ecosystem, as an escape hatch for (1) package names shadowed by the fixed language set (go/swift/r/…, which otherwise route to runtime introspection) and (2) named-only registries (cran/crates/maven/…) that previously relied on the agent inferring the ecosystem. Classification precedence is URL → ecosystem-hint → Language → Package; splitting once at the first :, a hint is recognized only when the prefix (case-insensitively) is one of the nine known ecosystem ids, the remainder is non-empty, and the remainder's first character is not / (so a bare npm: and a URL scheme's npm://x are both NOT hints and fall through). Version pins compose (crates:serde@1.0.100). This is a plugin-shell (skill contract) change — the MCP binary is unchanged. The published explicit-doc-lookup spec's pin scenario is also reconciled with the crates/go/rubygems pin-honoring behavior shipped earlier.

  • R runtime depth adapterintrospect kind=runtime now covers R: probes R (falling back to Rscript) --version, reads DESCRIPTION's Depends: R (>= x.y) as a constraint (lower bound, never an exact version), honors .r-version, and auto-detects R projects via DESCRIPTION+NAMESPACE together (a bare DESCRIPTION is too weak a signal on its own), or any of renv.lock / .r-version / *.Rproj. The look-up flagship example /livedocs:look-up R now anchors to the local R toolchain version when R is installed (DESCRIPTION Depends stays a lower-bound cross-check, never the effective version; without a toolchain the honest not-resolved degrade still applies). Runtime target ids are canonicalized before the safety gate, so natural spellings like R and JavaScript are accepted; renv.lock is a detection signal only (its pinned R version parsing is a tracked follow-up).

  • javascriptnode alias — runtime introspection with target=javascript resolves through the Node adapter; the result keeps the requested identifier and the source field discloses the node probe. No response-schema change.

  • Version pins honored for crates/go/rubygemsresolve_source / latest_version now confirm a requested pin at each ecosystem's first-class per-version endpoint (crates /crates/{n}/{v}, Go @v/v{v}.info, RubyGems v2 versions/{v}.json), reporting the confirmed version. latest_version gains a machine-readable pin_honored field: true only when the resolved version exactly equals the requested pin (modulo a leading v), false for a latest-only ecosystem (jsr/packagist/maven/cran), a version that wasn't found, or a non-exact token — an npm dist-tag (beta/next) or a partial pin (18) resolves to a moving/other concrete version and is reported pin_honored:false, never faked as a confirmed pin. On false, version is the registry's current resolution — the latest, or the concrete version a tag/partial resolved to — never presented as a confirmed pin or guaranteed-latest-stable. A requested pin always gets a pin_honored signal, even when nothing resolved. During ecosystem auto-detect, an npm pinned-version miss falls through to PyPI's exact pin instead of short-circuiting to npm's latest. Docs/repo URLs remain latest (default-branch) and stay labeled not-pinned. maven/packagist/jsr per-version support is a tracked follow-up.

  • Binary release ships the R adapter (#35) and this version-pin work (#36) together in one signed release train.