pi-diet-ast0.1.6
On-demand ast-grep structural search and replacement tools for Pi.
Untested on omp
This is a pi package. No one has reported whether it works on omp yet. If you try it, add your result below.
Reports 0
No reports yet.
Readme
pi-diet-ast
One of my diet context engineering and workflow extensions. Explore the complete collection: https://www.npmjs.com/~probabilityengineer
On-demand ast-grep structural search and replacement tools for Pi.
pi-diet-ast gives Pi agents a compact pair of model-visible tools for syntax-aware code search and conservative structural replacement. It keeps the prompt surface small: one search tool, one replace tool, no automatic scans, and no dynamic context injection.
Use it when a request is shaped like code structure — calls, imports, functions, classes, exports, object patterns, decorators, control flow — where grep is too literal and semantic search is too broad.
Tools
ast_grep_search— AST-aware code searchast_grep_replace— AST-aware replacement, dry-run by default
Search ergonomics
ast_grep_search supports two styles.
Custom ast-grep pattern
{ "mode": "pattern", "pattern": "foo($$$ARGS)", "lang": "typescript", "paths": ["index.ts"] }
Compact presets
{ "mode": "calls", "name": "runJj", "lang": "typescript", "paths": ["index.ts"] }
{ "mode": "imports", "module": "node:child_process", "lang": "typescript", "paths": ["index.ts"] }
{ "mode": "functions", "name": "buildStatus", "lang": "typescript", "paths": ["index.ts"] }
{ "mode": "classes", "name": "Parser", "lang": "typescript", "paths": ["src"] }
{ "mode": "exports", "lang": "typescript", "paths": ["index.ts"] }
Presets keep the tool count small while avoiding hand-written ast-grep patterns for frequent tasks. mode defaults to pattern for compatibility. For mode: "calls", a bare name such as registerCommand matches both bare calls and member calls like pi.registerCommand(...); use a dotted name for an exact callee.
Patterns are structural source-code fragments, not regular expressions, prose, or ast-grep YAML rule objects. Use $NAME for a single-node metavariable and $$$ARGS for a sequence of nodes, as in the existing pattern example. Choose concrete, syntactically valid queries and narrow paths to relevant files or directories.
Supported lang values: bash, c, cpp, csharp, css, elixir, go, haskell, html, java, javascript, json, kotlin, lua, nix, php, python, ruby, rust, scala, solidity, swift, tsx, typescript, yaml. Presets generate fixed syntax patterns; not every preset works in every language. Use mode: "pattern" for language-specific shapes that presets do not cover.
Use AST search first for syntax/code-shape questions, even when the target file is unknown. AST matching identifies syntax shapes, not resolved symbol identity, types, or conceptual behavior. An empty search returns No matches; invalid parameters or patterns may return an error instead. Neither establishes that the code is absent: check syntax, language, paths, and returned details, then try a language-specific pattern or inspect the relevant source directly. Read matched files to validate their surrounding context before drawing conclusions or editing.
Replace
ast_grep_replace remains conservative: it is a dry run unless apply: true is passed.
{
"pattern": "foo($$$ARGS)",
"rewrite": "bar($$$ARGS)",
"lang": "typescript",
"paths": ["src"],
"apply": false
}
Install
From npm:
pi install npm:pi-diet-ast
From GitHub:
pi install git:github.com/ProbabilityEngineer/pi-diet-ast
For project-local install, add -l:
pi install -l npm:pi-diet-ast
For local testing:
pi -e ./index.ts
Runtime
Uses sg from @ast-grep/cli if available, otherwise falls back to:
npx --yes @ast-grep/cli
Prompt overhead
pi-diet-ast registers compact tools and routing guidance only. It does not inject scan results or repository state into prompts.