Skip to content

v0.35.4 — native invocation A+B

Choose a tag to compare

@Ink01101011 Ink01101011 released this 21 Sep 10:09
· 123 commits to main since this release
a2b5aae

The hook, moved to where npm can actually reach it, installed only after asking — plus a hook-ownership defect found by running the gates on Linux for the first time.

The hook reaches the published package now

tools/ ships in neither artifact: npm pack packs from runtime-ts/, the wheel packs runtime-py/src/bantamkit. So every hook adapter under tools/hooks/ was unreachable from the only way bantamkit is installed. --hook now lives inside both runtimes. tools/hooks/bantamkit-hook.mjs remains as a 33-line shim on purpose — it is the command already registered in existing settings.json files, and deleting it would unhook those machines silently.

Hooks are never a side effect

New paired --install-hooks / --remove-hooks in both runtimes, each behind a three-state gate: a TTY answer, or --yes, or refuse with exit 2. Removal asks too: it rewrites your settings file exactly as installation does. A dated backup is written either way.

Fixed: hooks that could not be removed

Ownership was decided by asking whether a hook entry's JSON happened to contain the literal bantamkit — and the Node command carries that word only if the directory it was installed into does. Measured from an install path that does not:

launch path 3x --install-hooks --remove-hooks
contains bantamkit 7 entries, idempotent removes them
does not 21 entries, +7 per run "no bantamkit hooks are installed"

Both runtimes gave that same answer over that same file, so hook entries could accumulate in a user's settings that neither runtime could ever take back out. It reaches an npm install under another name, a Docker image copying dist/ elsewhere, and any vendored build. Ownership is now decided from the entry alone, with legacy arms so entries already written by earlier versions still remove cleanly.

Also

  • One-way export of fact names into the host's own auto-memory — writes only when absent, never rewrites or deletes, and exports nothing rather than guessing when the directory is unknown.
  • The MCP argument pre-parse the TypeScript port never had: 16 shapes across 7 tools.
  • checked_at per registry entry, closing a starvation in --update that affected every successful run, not just partial failures.
  • npm and PyPI READMEs split apart and gated so they cannot drift back together.
  • The PowerShell BOM claim, asserted in a docstring for months and never run, is now measured: false of PowerShell 6+ on every platform. Windows PowerShell 5.1 is left explicitly UNMEASURED rather than assumed, and what still needs a real Windows kernel is registered in git with what would settle each row.

Gates

conformance --all   8906 cases, 161 ruled-different, 0 failures
pytest              3205 passed, 57 skipped, 2 deselected, 3 xfailed
npm test            1259 tests, fail 0, 47 skipped
hook probes         18 pass, 0 fail
ruff                All checks passed!

Full changelog: v0.35.3...v0.35.4