aio-patch-anchor
aio-patch-anchor — anchor discovery & AST navigation for cli.js
Goal
Help write durable patches by surfacing structural / textual anchors in the extracted dist/<arch>/cli.js. Bridge between "I want to patch X" and "what's the invariant string near X I can anchor on".
Usage
/aio-claude-toolkit:aio-patch-anchor find <pattern> # grep + AST proximity hits
/aio-claude-toolkit:aio-patch-anchor navigate --fn <name> # walk AST around a function
/aio-claude-toolkit:aio-patch-anchor navigate --at <line> # show AST context at a line
/aio-claude-toolkit:aio-patch-anchor explorer # render single-file HTML browser of cli.js
Requires
- Scaffolded project (walk-up sentinel)
dist/<arch>/cli.jsalready extracted (aio-patch-extractrun before this)node(withacorn,acorn-walk,eslint-scopeinstalled intools/cli-nav/node_modules/)
If tools/cli-nav/node_modules is empty, anchor.sh runs bun install (preferred) or npm install in tools/cli-nav/ first.
Drift recovery workflow
- Compile reports MISSING patch IDs.
- For each missing ID, take a 3-5 word fragment of the patch's
oldfield. - Run
/aio-claude-toolkit:aio-patch-anchor find "<fragment>"to find the new location. - Update
tools/pipeline/patches.jsonoldfield with the surrounding invariant content. - Re-run
/aio-claude-toolkit:aio-patch-compile(transitive — extract first if cli.js stale).
See docs/repatching-playbook.md (step-by-step re-anchoring recipe).
Implementation
Invokes ${CLAUDE_PLUGIN_ROOT}/skills/aio-patch-anchor/scripts/anchor.sh "$@".